WIN32定义在哪里,如何在我的项目中包含此定义?

时间:2011-02-22 15:36:16

标签: c++ visual-studio-2010

我将第三方标题和源文件包含到我的项目中。

标题的顶部是:

#if defined(WIN32) || defined(WIN16)
#ifndef MSDOS
#define MSDOS
#endif
#endif

#include <stdio.h>
#include <stdlib.h>
#ifndef MSDOS
#include <unistd.h>
#endif
#include "des.h"

问题是#if定义(WIN32)失败并且在尝试#include unistd.h时编译失败,我不想这样做。

我有第三方项目使用此头文件,即WIN32已定义,并且它不会尝试包含在Visual Studio中我在“WIN32”上执行“转到定义”并在WinDefs中采用以下定义。小时。

#define WIN32

我不确定这是从哪个获取WIN32定义,因为第三方项目似乎不包含“WinDefs.h”。

所以我的问题是,如何在我当前的新项目中定义WIN32?

6 个答案:

答案 0 :(得分:7)

Visual Studio具有内置的定义_WIN32。 mingw-gcc内置了WIN32和_WIN32,因此该项目很可能使用gcc进行测试。你可以添加


#if defined(_WIN32) && !defined(WIN32)
#define WIN32
#endif

或者只是将-DWIN32添加到CFLAGS。

答案 1 :(得分:6)

取决于您的项目设置。 WIN32是在windows头文件中定义的,但你也可以将它传递给编译器(例如gcc的“-DWIN32”)。试一试,看它是否编译。

答案 2 :(得分:5)

检查您的包含。我猜测第三方标题包含在windows.h之前。所以,在你的main.cpp中或者等于它应该是

#include <windows.h> // this will also include windefs.h
#include <thirdParty.h>

而不是相反。

希望有所帮助。

答案 3 :(得分:0)

你可以在包含第三方标题之前简单地包含windows头文件(windows.h) - 正如你已经发现的那样在那里定义了WIN32,但技术上它可以在任何地方定义(所以如果第三方项目不包括windows头检查它是否在编译器项目中定义直接建立)。

BTW还有一个由编译器设置的_WIN32定义,如果检查代码是否在windows下编译,则查找此定义可能更好;

答案 4 :(得分:0)

寻求

答案的人
  

WIN32定义的位置

部分问题,我发现它定义于:

  

minwindef.h

     

ole2.h

注意,我不相信这些是它定义的唯一地方。我希望可能还有其他文件定义了。不过,我认为这可能对某些人有所帮助。

答案 5 :(得分:0)

编译器中定义了一些WIN32。就像这样,如果你使用gcc for windows,定义了WIN32。如果你使用gcc for linux,则没有定义WIN32 :) 所以,宏是一个开关。您可以将其定义为使用某些东西,而不是将其定义为不使用某些东西。