72

我在标题中选择了用户可编辑的#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 部分的需要。

4

2 回答 2

128
#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)
于 2013-06-21T14:20:23.407 回答
6

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

所有 c 文件都包含的 config.h 具有如下条目:

// 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
于 2017-08-10T13:51:42.457 回答