严格符合ANSI C的开/关模式的不同结果

严格符合ANSI C的开/关模式的不同结果,c,gcc,ansi,trigraphs,C,Gcc,Ansi,Trigraphs,为什么严格遵守ANSI C程序的打开或关闭模式会产生不同的结果?遵从严格的关于编写的理由,大多数现代工业编译器默认使用自己语言的一些扩展,有些默认使用C99,等等 当它不在ansi模式下时,gcc不会将trigrpah??=(长度3)转换为#(长度1),这解释了长度差异 如果未抑制警告,gcc将警告它在非ansi模式()下忽略: 警告:trigraph???=已忽略,请使用-trigraphs启用[-Wtrigraphs] 您可以在gccdocs一节中阅读有关方言选项的更多信息。对于-ansi,

为什么严格遵守ANSI C程序的
打开
关闭
模式会产生不同的结果?遵从严格的关于编写的理由,大多数现代工业编译器默认使用自己语言的一些扩展,有些默认使用C99,等等


当它不在ansi模式下时,gcc不会将trigrpah
??=
(长度3)转换为
#
(长度1),这解释了长度差异

如果未抑制警告,gcc将警告它在非ansi模式()下忽略:

警告:trigraph???=已忽略,请使用-trigraphs启用[-Wtrigraphs]

您可以在
gcc
docs一节中阅读有关方言选项的更多信息。对于
-ansi
,它表示以下内容:

[…]它还启用了不受欢迎且很少使用的ISO trigraph功能。[……]

Trigraph在
5.2.1.1
Trigraph序列一节中介绍,其中说明:

在进行任何其他处理之前,每次出现下列情况之一 将三个字符的序列(称为trigraph sequences12)替换为相应的单个字符

以下顺序包括:

??=   #

当它不在ansi模式下时,gcc不会将trigrpah
??=
(长度3)转换为
#
(长度1),这解释了长度差异

如果未抑制警告,gcc将警告它在非ansi模式()下忽略:

警告:trigraph???=已忽略,请使用-trigraphs启用[-Wtrigraphs]

您可以在
gcc
docs一节中阅读有关方言选项的更多信息。对于
-ansi
,它表示以下内容:

[…]它还启用了不受欢迎且很少使用的ISO trigraph功能。[……]

Trigraph在
5.2.1.1
Trigraph序列一节中介绍,其中说明:

在进行任何其他处理之前,每次出现下列情况之一 将三个字符的序列(称为trigraph sequences12)替换为相应的单个字符

以下顺序包括:

??=   #
“??=”
是一个三角图。这是一个非常古老的逃避源代码的想法,如果你不能进入你的终端,你想进入什么

“??=”
是实际的
“#”
“??=”
是一个三角图。这是一个非常古老的逃避源代码的想法,如果你不能进入你的终端,你想进入什么


“??=”
是实际的
“#”

压制警告从来都不是一个好主意:)无风不起浪。(仍然+1表示
intmain(void)
)我很好奇-您是碰巧使用
“??=”
作为测试字符串,还是在一个更大的程序中遇到了奇怪的情况并将其缩小到这个范围,还是您已经知道了
“??=”
是三角图,但仍然不能确定不同的结果?@Michael Burr我故意使用三角图。但是我最近遇到了他们,所以还没有弄清楚细节。压制警告从来都不是一个好主意:)无风不起浪。(仍然+1表示
intmain(void)
)我很好奇-您是碰巧使用
“??=”
作为测试字符串,还是在一个更大的程序中遇到了奇怪的情况并将其缩小到这个范围,还是您已经知道了
“??=”
是三角图,但仍然不能确定不同的结果?@Michael Burr我故意使用三角图。但是我最近遇到了他们,所以我还没有弄清楚原因details@downvoter是否愿意解释为什么你对问题和我的答案投了否决票,但似乎觉得另一个答案值得投票?@是否愿意解释为什么你对问题和我的答案投了否决票,但似乎觉得另一个答案值得投票?
??=   #