はじめに
前回の「defineとifdef~endifを用いた条件付きコンパイル」に続いて、 @nagisep さんから教えて頂いた「if defined」を用いた条件付きコンパイルについて学んだ結果をまとめてみました。
学習環境
- 今回はpaiza.ioのC言語のエディタを使いました。
if definedを使った例
-
if defined
を使った方が、より柔軟に条件分岐できるようです。-
ifdef
だとif~else
節しか使えないようですが... -
if defined
だと、if~else if~else
節が使えるので、複数のシンボル(※以下の例だとFOOとBAR)を使った条件分岐を実現できます。
-
-
if defined
の場合は、AND(&&)とOR(||)で複数の条件を使うことができます。-
@nagisep さんも指摘されていましたが、これは
ifdef
には無い機能なので、if defined
の方が便利な感じがします。
-
@nagisep さんも指摘されていましたが、これは
Main.c
#include <stdio.h>
#define FOO
#define BAR
int main(void){
#if defined(FOO) && ! defined(BAR)
printf("FOO\n");
#elif ! defined(FOO) && defined(BAR)
printf("BAR\n");
#else
printf("FOO BAR\n");
#endif
}
実行結果
FOO BAR
補足:これまでの学習の歩み
- 【C】初めてのC言語(1. Hello world)
- 【C】初めてのC言語(2. 四則演算とフォーマット指定子)
- 【C】初めてのC言語(3. ポインタ)
- 【C】初めてのC言語(4. 構造体)
- 【C】初めてのC言語(5. 関数)
- 【C】初めてのC言語(6. 配列)
- 【C】初めてのC言語(7. for文)
- 【C】初めてのC言語(8. 2次元配列)
- 【C】初めてのC言語(9. 関数のプロトタイプ宣言)
- 【C】初めてのC言語(10. 構造体配列)
- 【C】初めてのC言語(11. ヘッダファイル)
- 【C】初めてのC言語(12. 3つのからくり構文+ポインタ演算)
- 【C】初めてのC言語(13. メモリを扱う標準関数)
- 【C】初めてのC言語(14. ヒープの利用)
- 【C】初めてのC言語(15. sizeofの注意点)
- 【C】初めてのC言語(16. 文字列の基本)
- 【C】初めてのC言語(17. 文字列リテラル)
- 【C】初めてのC言語(18. 文字列の受け渡し)
- 【C】初めてのC言語(19. 文字列とバッファオーバーフロー)
- 【C】初めてのC言語(20. 文字列を扱う標準関数)
- 【C】初めてのC言語(21. コマンドライン引数と二重ポインタ)
- 【C】初めてのC言語(22. マクロ処理)
- 【C】初めてのC言語(23. 条件付きコンパイル)