我将第三方标题和源文件包含到我的项目中。
标题的顶部是:
#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?
答案 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 :) 所以,宏是一个开关。您可以将其定义为使用某些东西,而不是将其定义为不使用某些东西。