Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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.
}

config.h Что включено во все файлы 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