由于在检查未实际定义的预处理器符号值时,预处理器不会报告错误(通常是由于缺少#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”相同。
有没有更优雅的方法来执行此检查?
答案 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
现在,即使最终两次包含此标头,它也只会执行一次。