0

在阅读了 digraphs 和 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 功能的实现是否需要它们?(非常怀疑,但值得一问)

4

1 回答 1

3

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

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

这可能应该被认为是一个错误。

于 2013-01-10T02:14:38.547 回答