简写typedef指向常量结构的指针

使用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 ) 

基本上,不要typedef指针:)

 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); 

这些也是有效的:

 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)或类似的,除了反对指针的通常原因。

至于我对C型系统的理解,你不应该这样做。 第一个typedef声明类型为“指向结构的指针”。 将const应用于逻辑上会创建“指向struct的const指针”。 向构造本身注入const’ness将需要改变类型本身,因此,重新定义。 AFAIK,C中的类型组合是增量式的,您只能通过将修改器应用于现有类型而不是注入来创建新类型。

无论如何,指针的Typedef都不是一个好的样式。