C中const限定函数的性质
我想知道const限定函数指针是否有什么不同,因为我能想到的唯一含义是auto const限定其参数,当然不是这样 我创建了一个小示例文件(test.c):C中const限定函数的性质,c,function,constants,typedef,C,Function,Constants,Typedef,我想知道const限定函数指针是否有什么不同,因为我能想到的唯一含义是auto const限定其参数,当然不是这样 我创建了一个小示例文件(test.c): typedef void*vop(void*); vop-fn; const vop cfn; 内部主(空){ vop*p_fn=fn; 常数vop*cp_fn=fn;// 常量限定的函数指针与非常量限定的函数指针之间有什么区别 const具有通常的含义-一个可以修改,const一个不能修改。例如: void something(); vo
typedef void*vop(void*);
vop-fn;
const vop cfn;
内部主(空){
vop*p_fn=fn;
常数vop*cp_fn=fn;//
常量限定的函数指针与非常量限定的函数指针之间有什么区别
const
具有通常的含义-一个可以修改,const
一个不能修改。例如:
void something();
void something_else();
int main() {
void (*normal_pointer)() = something;
normal_pointer = something_else; // all fine
void (*const const_qualified_pointer)() = something;
const_qualified_pointer = something_else; // error
// for fun, let's aad typedef examples
// similar with a typedef, if you want to
typedef void functype();
functype *pnt = something;
pnt = something_else; // all fine
functype *const cpnt = something;
cpnt = something_else; // error
// note that if typedef is already a pointer... then it's already a pointer
typedef void (*functypepnt)();
functypepnt pnt2 = something;
pnt2 = something_else; // all fine
const functypepnt cpnt2 = something;
cpnt2 = something_else; // error
}
我看到的警告是“未定义的行为”的结果,还是本段不适用于本案(如果不是,在什么情况下可以适用)
是。vop
是函数类型。const vop
是未定义的行为。gcc
发出警告并忽略限定符
您可能希望const
-改为限定指针本身,而不是指向的类型:
vop *const cp_cfn = fn;
函数类型上不能有任何类型限定符,包括const
。这样做会影响函数类型
根据本手册第6.7.3p9节:
如果数组类型的规范包含任何类型限定符,则元素类型是如此限定的,而不是数组类型。如果函数类型的规范包含任何类型限定符,则行为是未定义的。
这声明了一个const
函数类型:
const vop cfn;
const vop *cp_fn;
这声明了一个指向const
函数类型的指针:
const vop cfn;
const vop *cp_fn;
这两个问题都违反了6.7.3p9。谢谢你的回答,但实际上我只是对“const
放在星号前面的情况感到好奇。问题标题可能有点误导。我是否应该更改它?对于那些可能无意中发现这个问题并真正想知道答案的人来说,这个答案将是一个很好的参考“常数指针”。