【发布时间】:2021-07-19 15:30:51
【问题描述】:
我正在尝试定义一个 Cpp 宏,例如 ENO_DECL(eno, func) 扩展如下
#define ENO_DECL(eno, func) { eno, #eno, func }
所以我可以写,例如,ENO_DECL(ENOMEM, resource_error) 当然可以。有些平台可能不会定义所有错误,所以我们需要这样的东西:
#ifdef EXYZ
ENO_DECL(EXYZ, type_error)
#endif
这当然不是那么优雅。如果未定义 EXYZ,我想摆脱 #ifdef 并将 ENO_DECL() 扩展为空。我已经阅读了一些有趣的帖子和博客,其中包含非常好的 cpp 技巧,但似乎没有涵盖这一点。我觉得这可以做到(便携式)。那正确吗? ...以及如何?
【问题讨论】:
-
我记得一个非常好的预处理器时间教程
if可以放入宏中,请参阅jhnet.co.uk/articles/cpp_magic 也许你可以使用它?请注意,它不能很好地替代ifdef,因为如果它找到一个未定义的宏,它将返回true,可能只是一个非常有限的if,它会查看宏的计算结果是否为true或错误的。所以这可能不是最好的解决方案。 -
类似于this?
-
@HWalters 我认为你是对的。不幸的是,除非您需要多次宏(我不需要),否则它并没有比在任何地方直接使用#ifdef 更好。 @mediocrevegetable1
ifdef是我需要的 :(
标签: c macros c-preprocessor