为什么预定义宏 __STDC_VERSION__ 未定义?
Why is the predefined macro __STDC_VERSION__ undefined?
我想知道我目前在我的 Visual Studio C++ 中使用哪个 C 标准,但是我在使用 __STDC_VERSION__
预定义宏和其他 C99 预定义宏时遇到了问题 - 一个错误表明这identifier is not defined 出现,当我使用 #ifndef __STDC_VERSION__
时,它似乎没有定义。这是否意味着我正在使用 ANSI C?
下面是使用__STDC_VERSION__
的示例代码:
int main(void) {
printf("%d\n", __STDC_VERSION__);
return 0;
}
Visual C++ 完全支持的唯一 C 标准是 ANSI-89/ISO-90 第一个标准。没有对 C99 或 C11 的官方支持;但是有足够的 C99 支持使 C++11 和 C++14 工作。
我用于源代码可移植性的是 #ifdef _MSC_VER
,如果已定义,则预计只有 C89/C90 支持。 (如果您需要更详细的信息,您可以测试 _MSC_VER 的值以查看哪个版本。维基百科上有一个 list of MSC/C++ versions and their _MSC_VER values。
显然,这必须在任何 C99 或 C11 宏之前进行测试。特别注意,如果 Microsoft 编译器定义了 __STDC__
,那么您甚至不会获得对 C99 的部分支持。该宏仅在使用 /Za
选项编译时定义,该选项禁用任何 Microsoft 扩展——包括 C++/C99 位,如 //
注释、块中的混合声明和代码,或 [=14 中的声明=] 语句。
我想知道我目前在我的 Visual Studio C++ 中使用哪个 C 标准,但是我在使用 __STDC_VERSION__
预定义宏和其他 C99 预定义宏时遇到了问题 - 一个错误表明这identifier is not defined 出现,当我使用 #ifndef __STDC_VERSION__
时,它似乎没有定义。这是否意味着我正在使用 ANSI C?
下面是使用__STDC_VERSION__
的示例代码:
int main(void) {
printf("%d\n", __STDC_VERSION__);
return 0;
}
Visual C++ 完全支持的唯一 C 标准是 ANSI-89/ISO-90 第一个标准。没有对 C99 或 C11 的官方支持;但是有足够的 C99 支持使 C++11 和 C++14 工作。
我用于源代码可移植性的是 #ifdef _MSC_VER
,如果已定义,则预计只有 C89/C90 支持。 (如果您需要更详细的信息,您可以测试 _MSC_VER 的值以查看哪个版本。维基百科上有一个 list of MSC/C++ versions and their _MSC_VER values。
显然,这必须在任何 C99 或 C11 宏之前进行测试。特别注意,如果 Microsoft 编译器定义了 __STDC__
,那么您甚至不会获得对 C99 的部分支持。该宏仅在使用 /Za
选项编译时定义,该选项禁用任何 Microsoft 扩展——包括 C++/C99 位,如 //
注释、块中的混合声明和代码,或 [=14 中的声明=] 语句。