[解決済み] 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
関連
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み] C言語で、ミリ秒に代わるスリープ関数はありますか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] スタティック・ライブラリとシェアード・ライブラリの違い?
-
[解決済み】定義と宣言の違いは何ですか?
-
[解決済み] 古いCコンパイラを使うのはセキュリティリスクか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】エラー:'for'ループの初期宣言はC99モードでしかできない【重複
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開