https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html:
一些用户试图使用-Wpedantic
来检查程序是否严格符合ISO C标准。他们很快发现它并没有达到他们想要的效果:它找到了一些非ISO实践,但不仅仅是ISO C要求诊断的那些实践,还有一些已经添加了诊断的实践。
-迂腐
没有找到的非ISO实践示例有哪些?
GCC允许标识符中的“$”字符作为大多数目标的扩展。无论std=开关如何,这都是正确的,因为此扩展不能与符合标准的程序冲突。但是,当预处理汇编器时,默认情况下美元不是标识符字符。
UPD。2.允许“普通<代码>复杂<代码>”:
#include <complex.h>
complex x;
$ gcc t0.c -std=c11 -pedantic -Wall -Wextra
<nothing>
C11,6.2.5类型,11:
有三种复合类型,分别为float\u complex
,double\u complex
,和long double\u complex
。
和7.3.1引言,4:
宏复合体
扩展为_复合体
;
UPD。3.\uuuu具有属性
:
#if __has_attribute(xxx)
#endif
int x;
$ gcc t0.c -std=c11 -pedantic -Wall -Wextra
<nothing>
GCC支持ISO C不要求的其他形式的常量表达式。例如:
int main() {
const int m = 5;
static int n = m;
return n;
}
这段代码在“学究式”模式下编译得很好,即使静态
变量是用不符合ISO C的常量表达式初始化的。
这里的问题基本上是,编写包含错误的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;
}
需要对整个程序进行分析,以检测两个文件之间的类型不匹配。这不是一个困难的案例;编译器可以用其类型注释每个全局符号,链接器可以检查每个符号的所有用法是否与定义一致。但我不知道有任何工具链,也没有任何静态分析产品,可以检测变量的这种错误。
每个人都知道饼干桶三角桩接龙游戏。你拿一个钉子,跳过另一个,跳进一个空洞,目标是只剩下一个钉子。 在游戏板对象的代码中,我有一个函数,它改变了你当前用来跳转的peg。为了解决这个问题,我将其连接到一个变量。每次你改变当前的钉住并使用它跳跃时,这算是一次移动。这是一个非常基本的启发式搜索算法,我希望是一个搜索算法:探索所有可能的跳跃可用一个peg。如果没有找到回溯的解决方案,请更新当前的peg并重复
本文向大家介绍vue-router钩子函数有哪些?都有哪些参数?相关面试题,主要包含被问及vue-router钩子函数有哪些?都有哪些参数?时的应答技巧和注意事项,需要的朋友参考一下 全局的:beforeEach、beforeResolve、afterEach 路由的:beforeEnter 组件的:beforeRouteEnter、beforeRouteUpdate、beforeRouteLea
问题内容: 对于Java的处理方式以及涉及到的数字和其他类型的数字,我有些困惑。例如: 输出(也许您应该先猜测一下): 这不能编译是可以预料的,是不同的对象。 令我有些惊讶的是,默认情况下9是an ,并且1)甚至没有编译。请注意,您不能将放入期望使用的方法中,但是在这里它们是相等的。 由于两个相同的原因,这令人惊讶,但似乎更糟。 不足为奇,因为自动装箱到和。 不足为奇,因为不同类中的对象不应该是。
本文向大家介绍label都有哪些作用?并举相应的例子说明相关面试题,主要包含被问及label都有哪些作用?并举相应的例子说明时的应答技巧和注意事项,需要的朋友参考一下 lable可以关联控件,可以和表单元素结合,使表单元素获得焦点。有两个属性,for和accesskey。 for 属性用来关联表单,accesskey属性设置快捷键。 for属性: accesskey属性:
我有问题,因为我想在内部包围一些,所以我需要知道。 哪些DOM元素可以是tr的子元素?(我知道div不能。)
图形对于建模真实世界的现象和关系非常有用。 从广义上讲,图数据结构和算法分为两类: 那些对稀疏图有用的(例如邻接列表,约翰逊算法) 那些对稠密图有用的(例如邻接矩阵、Floyd-Warisher)。 然而,在我能想到的每种情况下,现实世界的图表都是稀疏的。例如: Web网络形成稀疏图(每个站点都链接到其他几个站点) 社交网络形成稀疏图(每个人都认识几个其他人) 电气网络形成稀疏图(大多数电路元件只