如何不使用typedef与typeof直接表示指向const函数的指针?
指向const函数的指针的直接声明方式
是的,存在无需typedef或typeof的直接声明方式,符合标准C语法(兼容C99、C11、C23等版本):
const void (*fp)(void);
类型说明
这里的const直接修饰函数类型本身,表明指针fp指向的是一个被const限定的void(void)类型函数。这种类型和你通过typedef声明的const fun_t *fp完全等价:
typedef void fun_t(void);定义了函数类型fun_t即void(void)const fun_t *fp本质就是指向const限定的void(void)函数的指针,和直接声明的const void (*fp)(void)类型一致
类型检查说明
正如你提到的,这种类型具备独特的类型属性:
- 声明
void (*f)(const fun_t *fp);是合法的,因为参数类型是指向const函数的指针 - 但
(void (*)(fun_t *fp))NULL的强制转换是无效的,因为fun_t *(指向非const函数的指针)和const fun_t *(指向const函数的指针)之间的转换违反了const类型兼容规则,编译器会拒绝这种不安全的转换
内容的提问来源于stack exchange,提问作者Erik Carstensen
相关产品推荐
相关产品推荐

