代码:
#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!"); %>
不会抛出任何警告。
那么,为什么编译器在使用三字母时警告我,而在使用二字母时却不警告我?
最佳答案
因为三字母组具有悄悄更改代码的不良影响。这意味着同一个源文件在有和没有三字母替换的情况下都是有效的,但会导致不同代码。这在字符串文字中尤其成问题,例如 "<em>What??</em>"
.
语言设计和语言进化应该努力避免无声的改变。让编译器警告三字母是一件好事。
将此与二合字母进行对比,二合字母是新标记,不会导致无声变化。
关于c - 为什么 GCC 在使用三字母时发出警告,而在使用二字母时却不发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167102/