2015-07-14 35 views
5

için const-lik ekleme: Sonra işlev prototipler bildirirsenizopak sap

typedef struct FOO_Obj *FOO_Handle; 

o

void FOO_work(const FOO_Handle fooHandle); 

Nasıl const -lık uygulanır: thusly bir const nitelikli parametre olarak kullanmak?

const struct FOO_Obj *FOO_Handle // A 
struct FOO_Obj *const FOO_Handle // B 
const struct FOO_Obj *const FOO_Handle // C 

Veya UB o mı?

cevap

2

B. (eğer sunulan koduyla hiçbir tanımsız davranış yoktur.)

işlev çağrısı

void FOO_work(const FOO_Handle fooHandle); 

becode olacak işlevinde

void FOO_work(struct FOO_Obj* const fooHandle); 

Değişken fooHandle eşdeğerdir const olmayan bir struct FOO_Obj nesnesine bir const işaretçisi. Bir const nesnesine bir işaretçi yapmak için const niteleyicisini fooHandle'a ekleyemezsiniz.

typedef const struct FOO_Obj* FOO_ConstHandle; 
+0

Teşekkür: Bir const nesneye bir işaretçi var ve gizli yapı tutmak istiyorsanız

yerine, başka bir typedef yapmalıdır. İcon olmayan veriye 'const' işaretçisi ihtiyacım olan şey, bu yüzden doğru yoldaydım – Toby

İlgili konular