Ответ 1
#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)
У меня есть выбор #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.
#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)
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