typedef与const限定符在函数参数列表中的解析规则问询
typedef与函数参数中const限定符的解析机制
首先明确:typedef不是简单的文本替换,它的作用是为一个已有的类型创建别名,这个别名代表完整的类型,解析时会将其作为整体处理,和#define的字符串替换逻辑完全不同。
看你的示例代码:
typedef struct Parameters_t * Parameters_pot; f(const Parameters_pot pars); f(Parameters_pot const pars);
这两个函数声明的含义是完全等价的,原因如下:
Parameters_pot是struct Parameters_t *(指向结构体的指针)的类型别名,而非文本宏。- 当用
const修饰这个类型别名时,const是作用于整个指针类型,也就是限定指针变量pars本身为常量——意味着pars不能被重新赋值指向其他结构体,但它指向的结构体内容是可以修改的。
如果是用#define做文本替换(比如#define Parameters_pot struct Parameters_t *),那两个声明的含义才会不同:
const Parameters_pot pars会被替换为const struct Parameters_t * pars,表示指针指向的结构体内容是常量;Parameters_pot const pars会被替换为struct Parameters_t * const pars,表示指针本身是常量。
但typedef的逻辑是把struct Parameters_t *当作一个整体类型,所以无论const写在类型别名的前面还是后面,都是修饰这个指针变量本身,而非指针指向的对象。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

