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

问题描述 投票:0回答:1

我想知道我当前在 Visual Studio C++ 中使用哪个 C 标准,但我在使用

__STDC_VERSION__
预定义宏和其他 C99 预定义宏时遇到问题 - 出现错误,表明该标识符未定义,并且当我使用
#ifndef __STDC_VERSION__
好像没有定义。这是否意味着我正在使用 ANSI C?

下面是使用

__STDC_VERSION__
的示例代码:

int main(void) {
   printf("%d\n", __STDC_VERSION__);
   return 0;
}
c visual-c++ c99
1个回答
7
投票

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
语句中的声明。

© www.soinside.com 2019 - 2024. All rights reserved.