预处理器检查是否定义了多个定义
我有一个用户可编辑的标题中的#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