Где определен WIN32 и как я могу включить это определение в свой проект? - PullRequest
9 голосов
/ 22 февраля 2011

Я включаю сторонний заголовок и исходный файл в свой проект.

В верхней части заголовка есть это:

#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 ]

7 голосов
/ 22 февраля 2011

Visual Studio имеет встроенное определение _WIN32. В mingw-gcc встроены WIN32 и _WIN32, поэтому проект, скорее всего, был протестирован с использованием gcc. Вы можете добавить


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

или просто добавьте -DWIN32 к CFLAGS.

6 голосов
/ 22 февраля 2011

Зависит от настроек вашего проекта.WIN32 определен в заголовочных файлах Windows, но вы также можете передать его компилятору (например, "-DWIN32" для gcc).Попробуйте и посмотрите, скомпилируется ли он.

5 голосов
/ 22 февраля 2011

Проверьте ваши включает.Я предполагаю, что сторонний заголовок включен до windows.h.Итак, в вашем main.cpp или равном ему должно быть

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

, а не наоборот.

Надеюсь, это поможет.

0 голосов
/ 06 февраля 2017

Некоторые WIN32 определены в компиляторе.Так же, как это , Если вы используете GCC для Windows, определяется WIN32.Если вы используете gcc для linux, WIN32 не определяется:)
Итак, макрос - это переключатель.Вы можете определить, что использовать что-то, а не определить, чтобы что-то не использовать.

0 голосов
/ 11 ноября 2015

Для тех, кто ищет ответы на

где определяется WIN32

часть вопросов, я нашел это определено в:

minwindef.h

ole2.h

Обратите внимание, я не уверен, что это единственные места, которые он определил. Я ожидаю, что, вероятно, есть другие файлы, где это определено. Тем не менее, я подумал, что это может помочь некоторым людям.

0 голосов
/ 22 февраля 2011

Вы можете просто включить файлы заголовков Windows (windows.h) перед включением стороннего заголовка - как вы уже узнали, там определен WIN32, но технически он может быть определен где угодно (поэтому, если сторонний проект не включает Заголовки Windows проверяют, определено ли это в проекте компилятора непосредственно.

Кстати, есть также определение _WIN32, которое задается компилятором, возможно, лучше поискать это определение, если проверяется, компилируется ли код под окнами;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...