简写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都不是一个好的样式。