it-swarm-ja.tech

#if defined(WIN32)と#ifdef(WIN32)の違い

Linux gcc 4.4.1 C99で実行されるプログラムをコンパイルしています。

#definesを入れて、WindowsまたはLinuxでコンパイルされるコードを分離していました。ただし、このエラーが発生しました。

error: macro names must be identifiers.

このコードを使用する

#ifdef(WIN32)
/* Do windows stuff
#Elif(UNIX)
/* Do linux stuff */
#endif

ただし、これに変更すると、エラーが修正されました。

#if defined(WIN32)
/* Do windows stuff
#Elif(UNIX)
/* Do linux stuff */
#endif

なぜそのエラーが発生し、なぜ#definesが異なるのかと思っていました。

どうもありがとう、

94
ant2009

#ifdef構文を使用する場合は、角かっこを削除します。

2つの違いは、_#ifdef_が使用できる条件は1つだけであり、
while #if defined(NAME)は複合条件を実行できます。

あなたの場合の例:

_#if defined(WIN32) && !defined(UNIX)
/* Do windows stuff */
#Elif defined(UNIX) && !defined(WIN32)
/* Do linux stuff */
#else
/* Error, both can't be defined or undefined same time */
#endif
_
142
user44556
#ifdef FOO

そして

#if defined(FOO)

同じだ、

しかし、一度にいくつかのことを行うには、定義済みを使用できます。

#if defined(FOO) || defined(BAR)
41
neha

#ifdefは、その名前のマクロが定義されているかどうかを確認します、#ifは式を評価し、真の値をチェックします

#define FOO 1
#define BAR 0

#ifdef FOO
#ifdef BAR
/* this will be compiled */
#endif
#endif

#if BAR
/* this won't */
#endif

#if FOO || BAR
/* this will */
#endif
20
johannes