我想定义一个宏,如果条件涉及sizeof
为 true,如果为 false,则不执行任何操作(但仍然编译)。如果预处理器支持sizeof
,它看起来像这样:
#if (sizeof(void*) <= sizeof(unsigned int)) // what goes here?
# define POINTER_FITS_INTO_UINT
#endif
有一些页面(例如http://scaryreasoner.wordpress.com/2009/02/28/checking-sizeof-at-compile-time/ http://scaryreasoner.wordpress.com/2009/02/28/checking-sizeof-at-compile-time/) 解释了如何进行编译时断言 on sizeof
(如果失败则无法编译),但我没有找到一种方法可以将这种方法扩展到我想要的。
你就是做不到。 sizeof 是一个编译时运算符。 #if 和#define 和预处理器相关。由于预处理器在编译器之前运行,因此这是行不通的。然而,您可能能够找到一个神秘的编译器开关,允许您多次传递它(即预处理、假装编译、预处理、编译),但是,平心而论,我会放弃尝试做您想做的事情。它不应该工作,而且简单地说,它不工作。
最好的方法是将此类定义设置为传递给编译器的 -D 命令。您可以静态断言所选择的选项是正确的。这样,您只需为给定的编译模式(例如 PowerPC Release)等在外部设置一些定义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)