定義されている場合 (XX) をヘッダー ファイルの構造体/共用体内に配置できますか?
struct
{
int i;
#if defined(xx)
int j;
#endif
}t;
私は .c および .h ファイルの大きなファイル ベースを扱っており、このタイプの使用法で考えられる短所を知る必要があります。
定義されている場合 (XX) をヘッダー ファイルの構造体/共用体内に配置できますか?
struct
{
int i;
#if defined(xx)
int j;
#endif
}t;
私は .c および .h ファイルの大きなファイル ベースを扱っており、このタイプの使用法で考えられる短所を知る必要があります。
完全に有効ですが、これを使用することの明確な欠点は、使用する必要があるときはいつでも、それt.j
を囲む必要があることです。#if defined(xx)
そうしないと、コンパイラ エラーが発生します。
できますよ。プリプロセッサは何にでも使用でき、C を供給する必要はありません。この使用法の短所は、xx が定義されているかどうかに応じてサイズが変化する構造体があることです。この定義で構築されたライブラリと、定義なしでこのライブラリを使用している誰かが異なる構造体を持っているため、これは問題を引き起こしています....
などのプリプロセッサ ディレクティブ#if
は、プログラムのどこにでも配置できます。これらは、コンパイル段階の前に処理されるため、テキスト (コメントを除く) に存在する C コード (またはその他のもの) と実際の関係はありません。以下のコードのようなばかげたことを行うこともできますが、一般的には悪い考えです。
int foo(int x)
{
#if defined MONKEY
return 0;
}
int bar(int x)
{
#endif
return x;
}