ZHCUAU3J January 2018 – March 2024
在宽松 ANSI/ISO 模式(默认模式)下,编译器接受可能与严格遵循 ANSI/ISO C/C++ 的程序相冲突的语言扩展。在严格 ANSI 模式下,这些语言扩展遭到抑制,因此编译器将接受所有严格遵循规范的程序。
当您知道您的程序是一个遵循规范的程序,并且不会在宽松模式下编译时,请使用 --strict_ansi 选项。在此模式下,与 ANSI/ISO C/C++ 相冲突的语言扩展将被禁用,编译器将在标准要求时发出错误消息。本标准视为酌情处理的违规行为可作为警告发出。
示例:
以下是严格遵循规范的 C 代码,但在默认宽松模式下将不被编译器接受。若要使编译器接受这种代码,请使用严格 ANSI 模式。编译器将抑制 inline 关键字语言异常,然后,inline 可用作代码中的标识符。
int main()
{
int inline = 0;
return 0;
}
以下是未严格遵循规范的代码。编译器将不接受这种严格 ANSI 模式下的代码。若要使编译器接受这种代码,请使用宽松 ANSI 模式。编译器将提供 int16 类型扩展,并接受此代码。
extern int16 myFunc(void);
int main()
{
return 0;
}
以下代码在所有模式下均被接受。__int16 类型与 ANSI/ISO C 标准不冲突,因此始终可以作为一种语言扩展。
extern __int16 myFunc(void);
int main()
{
return 0;
}
默认模式为宽松 ANSI。 可以通过 --relaxed_ansi(或 -pr)选项来选择此模式。宽松 ANSI 模式接受种类最多的程序,以及所有 TI 语言扩展,即使是那些与 ANSI/ISO 相冲突的扩展,也会忽略一些编译器能够合理处理的 ANSI/ISO 冲突。节 5.13 中描述的一些 GCC 语言扩展可能与严格 ANSI/ISO 标准相冲突,但许多 GCC 语言扩展可能不与这些标准相冲突。