【发布时间】:2015-05-11 11:58:39
【问题描述】:
代码:
#include <stdio.h>
int main(void)
{
??< puts("Hello Folks!"); ??>
}
上面的程序在使用 GCC 4.8.1 和 -Wall 和 -std=c11 编译时,会给出以下警告:
source_file.c: In function ‘main’:
source_file.c:8:5: warning: trigraph ??< converted to { [-Wtrigraphs]
??< puts("Hello Folks!"); ??>
^
source_file.c:8:30: warning: trigraph ??> converted to } [-Wtrigraphs]
但是当我将main 的正文更改为:
<% puts("Hello Folks!"); %>
不会引发任何警告。
那么,为什么编译器在使用三合字母时会警告我,而在使用二合字母时却没有?
【问题讨论】:
-
@ShafikYaghmour 我认为那里的答案包含可以在回答这个问题时给出的所有信息,即使 gcc 的新版本(或不同的前端?)将其对三元组的处理降级为警告。
-
@ShafikYaghmour 链接的问题仍然说 gcc 生成 warnings 并且错误来自 Turbo C。所以我认为从那以后没有任何改变。
-
@BlueMoon 我刚刚意识到行为看起来不同的原因是现在几乎每个人都在使用
-std=xxx,这意味着gcc将自动打开三元组。所以也许我同意这是重复的。 -
三合字母和二合字母来自许多/大多数键盘没有适当按键的日子。今天,所有这些都已过时且不应使用。
标签: c gcc compiler-warnings digraphs trigraphs