72

ユーザーが編集可能なヘッダーに #defines を選択したので、ユーザーがそれらを完全に削除した場合に備えて、定義が存在することを確認したいと思います。

#if defined MANUF && defined SERIAL && defined MODEL
    // All defined OK so do nothing
#else
    #error "User is stoopid!"
#endif

これは完全に問題なく動作しますが、複数の定義が適切に配置されていないかどうかを確認するより良い方法があるかどうか疑問に思っています...つまり、次のようなものです。

#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn

または多分

#if !defined MANUF || !defined SERIAL ||....

空の #if セクションが不要になります。

4

2 に答える 2

128
#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)
于 2013-06-21T14:20:23.407 に答える
6

FWIW、@ SergeyLの答えは素晴らしいですが、ここではテスト用のわずかな変形があります. logical or が logical and に変更されていることに注意してください。

main.c には、次のようなメイン ラッパーがあります。

#if !defined(TEST_SPI) && !defined(TEST_SERIAL) && !defined(TEST_USB)
int main(int argc, char *argv[]) {
  // the true main() routine.
}

spi.c、serial.c、および usb.c には、次のようなそれぞれのテスト コードのメイン ラッパーがあります。

#ifdef TEST_USB
int main(int argc, char *argv[]) {
  // the  main() routine for testing the usb code.
}

すべての c ファイルに含まれる config.h には、次のようなエントリがあります。

// Uncomment below to test the serial
//#define TEST_SERIAL


// Uncomment below to test the spi code
//#define TEST_SPI

// Uncomment below to test the usb code
#define TEST_USB
于 2017-08-10T13:51:42.457 に答える