gpt4 book ai didi

c - gcc:-pedantic 找不到的非 ISO 实践的例子有哪些?

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

https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html :

Some users try to use -Wpedantic to check programs for strict ISO C conformance. They soon find that it does not do quite what they want: it finds some non-ISO practices, but not all—only those for which ISO C requires a diagnostic, and some others for which diagnostics have been added.


非 ISO 实践的例子有哪些, -pedantic 找不到的?

最佳答案

这里的问题从根本上说,可能会编写包含错误(不仅仅是未能实现严格一致性)的 C 程序,而要求 C 编译器检测这些错误是不合理的。在标准最初编写时(1989 年),全程序分析是不可能的,即使是现在,它也很昂贵。并且人们总是能够构建像

extern _Bool collatz_sequence_does_not_terminate(int);
int foo(int n) {
int rv;
if (collatz_sequence_does_not_terminate(n)) {
return rv;
}
return 23;
}
“此程序是否具有未定义的行为”的答案取决于其解决方案未知的数学问题。
因此,手册试图警告您,不仅 GCC 无法检测到所有可能违反 ISO C 一致性的情况,而且没有任何编译器可以。它的措辞有点太珍贵了,如果我还在 GCC 上工作,我可能会修改它以使其更清晰。

如果您想要一个使程序不符合标准、根本没有被诊断出并且在现实生活中相对可能出现的具体示例,请尝试以下大小:
/* a.c */
#include <stdint.h>
uint64_t val = 0x0123456789abcdef;

/* b.c */
#include <stdio.h>
extern double val;
int main(void) {
printf("%g\n", val);
return 0;
}
需要全程序分析来检测两个文件之间的类型不匹配。这不是一个困难的案例;编译器可以用它的类型注释每个全局符号,链接器可以检查每个符号的所有使用与定义的一致性。但我不知道有任何工具链,也没有任何静态分析产品,可以检测到变量的这个错误。

关于c - gcc:-pedantic 找不到的非 ISO 实践的例子有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69816741/

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