是否有一个优雅的解决方案来检查是否定义了预处理器符号

时间:2018-11-06 11:27:32

标签: c++ c-preprocessor

由于在检查未实际定义的预处理器符号值时,预处理器不会报告错误(通常是由于缺少#include“ some_header.h”),因此我将这种繁琐的三行构造与“ defined”一起使用:

#if !defined(SOME_SYMBOL)
#error "some symbol isn't defined"
#endif
#if SOME_SYMBOL == 1
// Here is my conditionally compiled code
#endif

与“ #ifndef”相同。
有没有更优雅的方法来执行此检查?

1 个答案:

答案 0 :(得分:0)

在构造中,您可以使用else块跳过对定义的检查:


13:46:54.345369 IP 192.168.1.10.4321 > 224.0.0.50.9898: UDP, length 135

但原则上,评论是正确的。 #if SOME_SYMBOL == 1 // Here is my conditionally compiled code #else // error #endif 和速记#if !defined是两个可用的版本。

当前,您正在检查#ifndef是否等于1。是否基于该值执行其他代码? 如果没有,您可以简单地使用:

SOME_SYMBOL

现在距典型的c ++ include guards仅一步之遥。从该Wikipedia链接复制,这是一个#ifdef SOME_SYMBOL // Here is my conditionally compiled code #else // error #endif 文件:

grandparent.h

现在,即使最终两次包含此标头,它也只会执行一次。