在阅读了有向图和三字母之后,我继续测试了一个简单的程序:
#include <stdio.h>
int main()
{
int a = 0;
//??/
++a;
printf("%d",a);
return 0;
}
并通过反射我做了
g++ -std=c++11 test.c
令我惊讶的是没有发出任何警告并且打印了0,所以我继续尝试使用C编译器进行编译,并且由于三字符确实发出了警告。
我的问题是为什么-std=c++11
会自动拉入-trigraphs
并默认不发出警告? (不使用-Wall)某些C ++ 11功能的实现是否需要它们? (非常怀疑,但值得一提)
答案 0 :(得分:3)
传递-std=c99
与启用三元组和禁用警告具有相同的效果。
必须使trigraph严格符合标准。禁用警告是令人惊讶的,但请注意警告是关于忽略的三字母。警告可能会消失,因为-std
无法激活关于使用的三元组的单独警告(-Wtrigraphs
)。
这应该被视为一个错误。