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

Ult*_*ior 3 c standards coding-style

使用typedef声明结构

typedef struct some_struct {
int someValue;
} *pSomeStruct;
Run Code Online (Sandbox Code Playgroud)

然后使用const声明将其作为参数传递给某个函数,暗示'const some_struct*var'

void someFunction1( const pSomeStruct var )
Run Code Online (Sandbox Code Playgroud)

结果变成了

some_struct * const var
Run Code Online (Sandbox Code Playgroud)

这也在ISO C标准的第6.7.5.1节中说明,该标准指出在这种情况下'const'适用于指针而不适用于它指向的数据.

所以问题是 - 有没有办法用typedef用shortended符号声明一个const结构的指针,或者必须总是有一个特殊的单独声明:

typedef const struct some_struct *pcSomeStruct;
void someFunction2( pcSomeStruct var )
Run Code Online (Sandbox Code Playgroud)

pmg*_*pmg 8

基本上,不要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);
Run Code Online (Sandbox Code Playgroud)

或者,根本不要输入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);
Run Code Online (Sandbox Code Playgroud)

  • @ user757808 - 我更喜欢在指针中看到`const`关键字,而不是看到`user_defined_const_pointer_typedef`,并且必须弄清楚API用于const指针`typedef的命名约定.每个知道C的人都知道`const int*`和`int*const`之间的区别.不是每个人都自动看到`const some_struct`和`const_some_struct`之间的区别. (3认同)