1. ホーム
  2. c

[解決済み] if defined(WIN32) と #ifdef(WIN32) の違いについて。

2022-02-10 10:38:09

質問

linux gcc 4.4.1 C99上で動作するプログラムをコンパイルしています。

私は、WindowsとLinuxのどちらでコンパイルされるかを分けるために、#definesを入れただけです。しかし、このようなエラーが発生しました。

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が違うのかが気になったのですが?

ありがとうございます。

解決方法は?

ifdef構文を使用する場合は、括弧を削除してください。

両者の違いは #ifdef は1つの条件しか使えません。
一方 #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