無関係な質問が2つあります。
#define
数字以外のものを定義するために使用することは可能ですか?(拡張ASCII文字など)。main()
関数内でプリプロセッサディレクティブを使用することは良い習慣と考えられていますか?私がこれを行うと思う唯一の理由は、実行されているOSに応じて異なるコードを実行することです。
無関係な質問が2つあります。
#define
数字以外のものを定義するために使用することは可能ですか?(拡張ASCII文字など)。
main()
関数内でプリプロセッサディレクティブを使用することは良い習慣と考えられていますか?私がこれを行うと思う唯一の理由は、実行されているOSに応じて異なるコードを実行することです。
オブジェクトのようなマクロ(#define
引数のないマクロ)は、単なる置換です。したがって、コードに含まれている可能性のあるものはすべて、たとえばリテラル文字列:#define PROGRAM_NAME "MyProgram"
、または複数行のコードブロックの代わりになります。後者の役に立たない例を次に示します。
#define INFINITE_PRINTF while (1) \
{ \
printf("looping..."); \
}
2番目の質問については、Cコード全体でプリプロセッサディレクティブを使用して、前述のことを実行するのが一般的です。条件付きで、コードを含めたり除外しmain
たりします。#define
わかりやすくするために、使用する場所の近くの定数に使用することがあります。
文字列を定義するだけでなく、コードを定義することもできます。C ++の作成者は、プリプロセッサの使用に眉をひそめていますが。
main()はOS固有のコードには高すぎると思います。OS固有のコードをラップする関数/クラスを作成してみます。OS固有のコードを配置できるレベルが低いほど、優れています。