C ++ 11中的(Di | Tri)图表

时间:2013-01-09 23:30:42

标签: c++ gcc c++11 c99 trigraphs

在阅读了有向图和三字母之后,我继续测试了一个简单的程序:

#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功能的实现是否需要它们? (非常怀疑,但值得一提)

1 个答案:

答案 0 :(得分:3)

传递-std=c99与启用三元组和禁用警告具有相同的效果。

必须使trigraph严格符合标准。禁用警告是令人惊讶的,但请注意警告是关于忽略的三字母。警告可能会消失,因为-std无法激活关于使用的三元组的单独警告(-Wtrigraphs)。

这应该被视为一个错误。