有条件编译的注意事项

dor*_*ron 12 c c++ coding-style

何时进行条件编译是一个好主意,什么时候是一个非常糟糕的主意呢?

通过条件编译,我的意思是使用#ifdefs仅在某些条件下编译某些代码位.所述#definedš本身可以是在任一个共同的头文件或经由引入的-D编译器指令.

Mat*_* M. 7

好主意:

  • 标题保护(你不能为便携性做得更好)
  • 条件实现(与平台差异杂耍)
  • 调试特定的检查(断言等...)
  • 每建议:extern "C" {}使得相同报头可以由C++实现,并通过API的C客户端使用

坏主意:

  • 更改编译标志之间的API,因为它强制客户端使用相同的编译标志更改其使用... urk!

  • 还有一个好主意:有条件地编译用于将C API暴露给C++的头文件中的`extern"C"{`.坏主意应该是"其他一切". (3认同)
  • 我不知道你的"好主意"部分中的第二点是否真的有效,给定了诸如boost/APR等便携式库.我应该想象极少数极端情况需要有特定于平台的东西.在这样一个区块内处理.我认为在这种特殊情况下,你最好依靠Makefile来为平台构建适当的实现,而不是在同一个文件中对块进行条件编译...... (2认同)