使用typedef
声明结构typedef struct some_struct {
int someValue;
} *pSomeStruct;
然后将它作为参数传递给带有const声明的某个函数,暗示'const some_struct * var'
void someFunction1( const pSomeStruct var )
结果变成
some_struct * const var
ISO C标准的第6.7.5.1节也说明了这一点,它表明在这种情况下'const'适用于指针而不适用于它所指向的数据。
所以问题是 - 有没有办法用typedef用shortended表示法声明一个const结构的指针,或者必须总是有一个特殊的单独声明:
typedef const struct some_struct *pcSomeStruct;
void someFunction2( pcSomeStruct var )
答案 0 :(得分:8)
基本上,不要输入dede指针:)
typedef struct some_struct {} some_struct;
void some_function1(some_struct *var);
void some_function2(const some_struct *var);
void some_function3(some_struct *const var);
void some_function4(const some_struct *const var);
或者,根本不要输入def:D
struct some_struct {};
void some_function1(struct some_struct *var);
void some_function2(const struct some_struct *var);
void some_function3(struct some_struct *const var);
void some_function4(const struct some_struct *const var);
答案 1 :(得分:1)
这些也是有效的:
typedef struct some_struct {
int someValue;
} const * pSomeStruct;
typedef struct some_struct {
int someValue;
} const * const pSomeStruct;
但是这种风格在C ++中并没有被广泛使用。更确切地说:
struct some_struct {
int someValue;
};
struct some_struct {
int someValue;
};
然后分开typedef。但是,那也没有被广泛使用。许多其他C ++程序员和我宁愿声明你的函数,如void foo (some_struct const * const)
或类似的,除了反对指针的通常原因。
答案 2 :(得分:0)
就我对C型系统的理解而言,你不应该这样做。第一个typedef声明类型为“指向结构的指针”。将const应用于逻辑上会创建“指向struct的const指针”。向结构本身注入const'ness将需要改变类型本身,因此,重新定义。 AFAIK,C中的类型组合是增量式的,您只能通过将修改器应用于现有类型而不是注入来创建新类型。
无论如何,指针的Typedef都不是一个好的样式。