Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何应对Microsoft扩展?_C++_Windows_Winapi - Fatal编程技术网

C++ 如何应对Microsoft扩展?

C++ 如何应对Microsoft扩展?,c++,windows,winapi,C++,Windows,Winapi,我在项目中包含了标题,收到以下错误: 错误C2467:匿名“struct”(wingdi.h)的非法声明 wingdi.h头(它包含\u devicemodeW中的匿名结构)包含在windows.h中。这种情况与我当前的语言设置冲突(禁用语言扩展/Za)据我所知,WinApi始终使用语言扩展,如果我想使用WinApi,我应该始终使用语言扩展?(我正在使用msvc2015)不幸的是,情况就是这样。微软增加了语言扩展,因为它简化了他们自己的代码。但如果你想一想,他们并不孤单。LINUX内核编写时使用

我在项目中包含了
标题,收到以下错误:

错误C2467:匿名“struct”(wingdi.h)的非法声明


wingdi.h
头(它包含
\u devicemodeW
中的匿名结构)包含在
windows.h
中。这种情况与我当前的语言设置冲突(禁用语言扩展
/Za
)据我所知,WinApi始终使用语言扩展,如果我想使用WinApi,我应该始终使用语言扩展?(我正在使用msvc2015)

不幸的是,情况就是这样。微软增加了语言扩展,因为它简化了他们自己的代码。但如果你想一想,他们并不孤单。LINUX内核编写时使用了相当多的GCC扩展。我建议为您需要的实现一个抽象层。这样,您可以只构建几个扩展名文件enabled@StoryTellerLinux内核的头文件不是应用程序开发的SDK。我从来没有启用过一些GCC扩展来使用gnuclibrary(glibc)头。许多有用的GCC扩展都是一致的;即使在实现所有必需的ISO C诊断并识别所有ISO C构造的编译模式下,它们也可以保持启用状态。您可以在项目中的每个源代码文件上指定/Za。因此,只需将需要#include的代码移动到一个文件中,然后就可以不用它进行编译了。然后,当您必须移植时,它会自动成为您必须修补的对象。轻松搞定。@Kaz-是的,公共窗口标题不好。然而,关于编译器扩展以促进特定项目的观点仍然存在。而且许多GCC扩展也不符合要求。因此,我不知道你在争论什么。有关讨论和解决方法,请参阅:
#定义非工会
。这将禁用匿名结构和联合。