VS2019编译器支持哪个版本的C?

时间:2019-09-16 22:32:04

标签: c visual-studio version

我如何知道VS2019编译器支持哪个C版本?我查看了项目C / C ++和Linker命令行,未找到-std = Cxx标志。编译以下代码:

for (int i = index; i < nb_users - 1; i++) {
    users[i] = users[i + 1];
}

所以我根据this 猜测它是C99,但是有没有办法在VS2019中的某处进行检查?

2 个答案:

答案 0 :(得分:2)

VS2019支持ANSI C90以及C ++所需的一些更高标准的其他一些功能。

例如,您可以使用以下代码告诉MSVC不完全支持C99,它将无法编译:

int foo(int n, char *s)
{
    char s2[n];
    strcpy(s2, s);
    return !strcmp(s, s2);
}

MSVC不支持此特定功能(可变长度数组),而您提到的功能(for循环初始声明)则受支持。

答案 1 :(得分:0)

  

VS2019编译器支持哪个版本的C?

充其量是C 1989。


可以通过__STDC__ __STDC_VERSION__的值来识别符合C标准的编译器。

#ifndef __STDC__
  printf("Does not ID itself as compliant to any C standard.\n");
#else
  printf("Compliant to some C standard\n");
  #ifndef __STDC_VERSION__
    printf("C 1989\n");
  #else 
    // Expected values of of 2019
    // 199409L
    // 199901L
    // 201112L
    // 201710L
    printf("C %ld\n", __STDC_VERSION__);
  #endif
#endif

我希望VS2019不会确定自己符合任何C标准或1989年标准。

  

__ STDC __ 仅当编译为C且指定了/Za编译器选项时才定义为1。否则,未定义。 Predefined macros


VS2019不在此incomplete list of C compilers