严格符合ANSI C的开/关模式的不同结果
为什么严格遵守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,
打开
或关闭
模式会产生不同的结果?遵从严格的关于编写的理由,大多数现代工业编译器默认使用自己语言的一些扩展,有些默认使用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是否愿意解释为什么你对问题和我的答案投了否决票,但似乎觉得另一个答案值得投票?@是否愿意解释为什么你对问题和我的答案投了否决票,但似乎觉得另一个答案值得投票?
??= #