Препроцессор проверяет, не определено ли несколько определений


у меня есть выбор #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 ||....

чтобы удалить необходимость в пустой # если раздел.

2   51   2013-06-21 18:16:59

2 ответа:

#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)

FWIW ,ответ @ SergeyL отличный, но вот небольшой вариант для тестирования. Обратите внимание на изменение логического или логического И.

главная.c имеет основную оболочку, как это:

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

spi.c, серийный номер.c и usb.с основными оболочками для их опробования такой код:

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

config.ч Который включен во все файлы c имеет такую запись:

// 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