Портирование кода C с помощью #ifdef и #ifndef (препроцессор C) - PullRequest
1 голос
/ 06 марта 2011

Я портирую игру для iPhone на Mac и пишу файл с общими определениями, который имеет следующее:

// first reset all defines

#undef TARGET_IPHONE
#undef TARGET_MAC

// set defines

#if TARGET_OS_MAC
#if TARGET_OS_IPHONE
#define TARGET_IPHONE
#else
#define TARGET_MAC
#endif
#endif

#ifdef TARGET_IPHONE
#error err1
#endif

#ifndef TARGET_IPHONE
#error err2
#endif

Но при сборке для iPhone и err1, и err2 выбрасываютсякомпилятор.

Я не понимаю, в чем здесь проблема?

РЕДАКТИРОВАТЬ: После примерно часа попыток без удачи мне пришлось добавить свое собственное определениекодировать параметры сборки.

Ответы [ 2 ]

1 голос
/ 06 марта 2011

Ваш код в порядке. На мой компилятор (gcc mingw) #error err2 выбрасывается. И если я вставлю

#define TARGET_OS_MAC 1
#define TARGET_OS_IPHONE 1

где ваш // set defines, #error err1 выбрасывается.

0 голосов
/ 07 марта 2011

Это похоже на ошибку компилятора, или вам нужно специальное разрешение от Apple, чтобы использовать #ifndef (это шутка (я думаю).)

Вы можете попробовать этот эквивалентный синтаксис, который может работать с компилятором Apple:

# если! Определено (TARGET_IPHONE)

или

# if! TARGET_IPHONE

или даже

# ifdef TARGET_IPHONE

# * еще 1015 *

Это вызывает беспокойство - я бы искал обновленный или другой компилятор.

...