预处理器检查是否定义了多个定义

我有一个用户可编辑的标题中的#defines的select,所以我随后希望检查的定义存在的情况下,用户完全删除它们,例如

#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的回答很好,但是这里是一个testing的轻微变体。 注意逻辑或逻辑上的变化。

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都有这样的testing代码的主要包装器:

 #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