【发布时间】:2014-11-29 16:52:46
【问题描述】:
我正在使用宏在我的代码中定义简单的变量(类似这样):
#define foobar 1
//...
barfoo(foobar);
为了防止错误,我想通过验证输入来确保foobar 是一个数字。 foobar 应该始终是一个数字,所以它可以很简单。
显然,预处理器不处理数学,因此任何使用算术产生某种类型错误的希望都落空了。
出于这个原因,我猜常量确实更好,但我正在尝试使用所有宏,因此它在我拥有的配置文件中是一致的(有些确实需要宏)。正则表达式可能是一个不错的解决方法,但 GCC 似乎不支持 [with macros] 这个(另外,http://xkcd.com/1171/)。
【问题讨论】:
-
GCC 从 4.9 开始支持正则表达式。无论如何,我想你必须先做
#define ISNUM(x) ISNUM_##x(),然后是大量的#define ISNUM_0() 1等。如果你没有为输入定义宏,你会得到一个错误。 -
@chris 不在宏中
-
@chris 这与这个问题有什么关系? GCC 的正则表达式支持用于运行时正则表达式匹配,没有预处理器扩展。
-
我猜常量确实因为这个原因更好 - 你能否详细说明你的上下文/配置情况,以便人们可以理解如何可能建议你如何适应或合并您认为正确的解决方案?
-
@hvd,没错,我一开始并没有意识到它是 PP 的正则表达式,因为问题没有注释,而且一开始就提到缺乏支持似乎很奇怪众所周知的 GCC 就在后面。
标签: c++ validation macros c-preprocessor