gpt4 book ai didi

c - C 中 const 限定函数的行为

转载 作者:行者123 更新时间:2023-12-04 08:24:16 25 4
gpt4 key购买 nike

我想知道 const 限定函数指针是否有任何区别,因为我能想到的唯一含义是 auto const 限定其参数,这当然不是这种情况。
我创建了一个小示例文件(test.c):

typedef void* vop(void*);

vop fn;
const vop cfn;

int main(void){
vop *p_fn = fn;
const vop *cp_fn = fn; // <- gives compiler warning
vop *p_cfn = cfn;
const vop *cp_cfn = cfn;
}
跑了 gcc -Wall -Wno-unused-variable -c test.c这会产生以下警告:

warning: initialization makes '__attribute__((const))' qualified function pointer from unqualified [-Wdiscarded-qualifiers]


因此,将“指向 const vop 的指针”分配给“指向 vop 的指针”类型的变量是“可以的”,如果它不是函数指针,则会产生如下结果:

warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]


但现在它警告相反的情况。那么问题来了:const 限定的函数指针和那些非 const 限定的函数指针有什么区别?

注意: cppreference有以下段落:

If a function type is declared with the const type qualifier (through the use of typedef), the behavior is undefined.


我看到的警告是“未定义行为”的结果还是这一段在这种情况下不适用(如果不是,在什么情况下可以适用)?

最佳答案

函数类型不能有任何类型限定符,包括 const .这样做吧undefined behavior .
来自 C standard 的第 6.7.3p9 节:

If the specification of an array type includes any type qualifiers, the element type is so-qualified, not the array type. If the specification of a function type includes any type qualifiers, the behavior is undefined.


这声明了一个 const功能类型:
const vop cfn;
这声明了一个指向 const 的指针功能类型:
const vop *cp_fn;
两者都违反了 6.7.3p9。

关于c - C 中 const 限定函数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65343575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com