ヘッダーに#defineの選択肢があり、ユーザーが編集できるようになっているので、ユーザーがそれらを完全に削除する場合に定義が存在することを確認します。複数の定義が定義されていない場合のプリプロセッサのチェック
#if defined MANUF && defined SERIAL && defined MODEL
// All defined OK so do nothing
#else
#error "User is stoopid!"
#endif
これは完全にOKに動作し、複数の定義が所定の位置にされていないかどうかを確認するためのより良い方法があるかどうか、私はしかし疑問に思って...つまり、のようなもの:
#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn
または多分
#if !defined MANUF || !defined SERIAL ||....
空の#ifセクションが不要です。
FYI: 'defined'は次のようなエントリです。関数のように呼び出されます( 'sizeof'と同じです)。だから関数のように呼び出すと、あなたの例は正常に動作します。また、プリプロセッサの文でも、ほとんどの論理演算子( '=='、 '!='、 '!'、 '||'、 '&&')を使うことができます。 –
boolean代数の一般的な原則は '!(x && y)'を '(!x ||!)'に置き換えることです。 http://en.wikipedia.org/wiki/De_Morgan%27s_laws – Vicky