Visual Studio 2017 does not supportC11 new feature _Generic

做~自己de王妃 提交于 2019-12-04 04:39:36

问题


Can anybody advise why Visual Studio 2017 does not support the C11 new feature _Generic? I found it is a very useful feature but cannot used in Visual Studio 2017.

Below is the sample code:

#include <stdio.h>
#define MYTYPE(X) _Generic((X),\
int:"int",\
float:"float",\
double:"double",\
default:"other")

int main(void)
{
      int d = 5;
      printf("%s\n", MYTYPE(d));
      printf("%s\n", MYTYPE(2.0*D));
      return 0;
}

The complier will give below warnings and errors:

1>------ Build started: Project: Project1, Configuration: Debug Win32 ------
1>predef.c
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(11): warning C4013: '_Generic' undefined; assuming extern returning int
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(11): error C2059: syntax error: 'type'
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(12): error C2065: 'D': undeclared identifier
1>c:\users\mia\documents\c\listing 16.13\project1\project1\predef.c(12): error C2059: syntax error: 'type'
1>Done building project "Project1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

回答1:


Visual Studio 2017 does not support any C11 features. You can plug Intel C compiler into Visual Studio (which supports C11) or use Clang or Gcc.

Quora answer:

  • To your Visual Studio add the inbuilt CLANG support
  • Create new project
  • In project properties (General) for “Platform Toolset” select “Visual Studio 2017 - Clang with Microsoft CodeGen (v141_clang_c2)
  • In C/C++ “Language” section open the “C language” standard list , where you will find all the C standards relevant todayL C89, C99, C11 …select the one you wish

After this (same as ever) VS2017 will compile files with “.c” extension as C, and “.cpp” extension as C++.

Do not forget that one can change the properties on the per file basis too.




回答2:


This is because Microsoft has never prioritized conformance to the C language standard. Over the last 20 years or so, their main focus has been C++. So Visual Studio is to be regarded as a C++ compiler.

In "C mode", it still has questionable compliance towards the first C standard C90. It took them forever to make an attempt to get C99 compliance, they made some effort towards that only in recent years. It is still not fully C99 compliant either. As far as I know, there are no plans for C11 or C17 compliance.

So if standard conformance is important to you, you must look for another C compiler.



来源:https://stackoverflow.com/questions/51960833/visual-studio-2017-does-not-supportc11-new-feature-generic

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!