以下功能是 Oracle Solaris 中 C 编译器的新缺省设置:
C 编译器的缺省模式已更改
新的缺省模式可能会影响您的应用程序
如果需要,仍可使用旧模式
以下更改说明了 __STDC_VERSION__ 的新功能:
缺省情况下,在 Oracle Solaris 上以前版本的 C 编译器接受它们知道的所有 C99 和 C11 功能,但仅通过将 __STDC_VERSION__ 预定义为 199409L 来声明为符合 C89。
缺省情况下,新的 C 编译器将 __STDC_VERSION__ 预定义为 201112L,声明符合 C11。
以下信息说明对 Oracle Solaris 平台中的用户应用程序的影响:
所包括的使用诸如 _XOPEN_SOURCE、_POSIX_SOURCE 和 _POSIX_C_SOURCE 之类的宏的文件和功能测试可能以不同方式进行解析。
例如,如果使用 _POSIX_SOURCE,则可能发生以下错误:
Compiler or options invalid for pre-UNIX 03 X/Open applications
问题在于,_POSIX_SOURCE 在技术上请求了 C89 编译器,如 standards(5) 手册页中所述。
如果您的应用程序测试较旧版本的标准(例如,_POSIX_SOURCE),可考虑更改代码以尝试较新版本(在此示例中是 _XOPEN_SOURCE=600)
测试 __STDC_VERSION__ 的用户应用程序可能以不同方式进行解析
您可能不希望明确选择 –std=c89,因为这样做将会禁用 C99 和 C11 功能。
而如果选择 –xlang=c89,则会使新的 C 编译器接受与以前版本的 C 编译器相同的程序并定义相同的 __STDC_VERSION。