关于__STRICT_ANSI__的来历,参见下面关于gcc编译选项的说明:
-ansi
支持符合ANSI标准的C程序....这样就会关闭GNU C中某些不兼容ANSI C的特性,例如asm, inline和 typeof关键字,以及诸如unix和vax这些表明当前系统类型的预定义宏.同时开启 不受欢迎和极少使用的ANSI trigraph...尽管使用了-ansi选项,下面这些可选的关键字, __asm__, __extension__, __inline__和__typeof__仍然有效.你当然不会把 他们用在ANSI C程序中,但可以把他们放在头文件里...,因为编译包含这些头文件的程序时,可能会指定 -ansi选项.另外一些预定义宏,如__unix__和__vax__,无论有没有使用 -ansi选项,始终有效....-std=c++11下的变化
但是到gcc全面支持C++11以后,这个逻辑好像就不对了。
下面是一段测试代码。