为什么预定义宏 __STDC_VERSION__ 未定义?

Ahm*_*ham 1 c c99 visual-c++

我想知道我当前在 Visual Studio C++ 中使用哪个 C 标准,但我在使用__STDC_VERSION__预定义宏和其他 C99 预定义宏时遇到了问题 - 出现一条错误,表明该标识符未定义,当我使用时,#ifndef __STDC_VERSION__似乎它没有定义。这是否意味着我正在使用 ANSI C?

下面是使用的示例代码__STDC_VERSION__

int main(void) {
   printf("%d\n", __STDC_VERSION__);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*sky 6

Visual C++ 完全支持的唯一 C 标准是 ANSI-89/ISO-90 第一个标准。C99或C11没有官方支持;但有足够的 C99 支持来使 C++11 和 C++14 工作。

我用于源代码可移植性的是#ifdef _MSC_VER并且期望仅支持 C89/C90(如果已定义)。(如果您需要更详细的信息,可以测试 _MSC_VER 的值来查看哪个版本。维基百科上有MSC/C++ 版本及其 _MSC_VER 值的列表

显然,必须在任何 C99 或 C11 宏之前对其进行测试。特别注意的是,如果 Microsoft 编译器定义了__STDC__,那么您甚至无法获得对 C99 的部分支持。该宏仅在使用该选项进行编译时定义/Za,这会禁用任何 Microsoft 扩展,包括 C++/C99 位//,如注释、块中的混合声明和代码或语句中的声明for