【发布时间】:2011-05-21 10:29:01
【问题描述】:
如果涉及sizeof 的条件为真,我想定义一个宏,如果它为假,则什么都不做(但仍然编译)。如果预处理器支持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/)解释了如何在sizeof 上进行编译时断言(如果失败则编译失败),但我没有看到一种将这种方法扩展到我想要的方法的方法。
【问题讨论】:
-
... 根据指针是否适合 uint,您究竟想做什么不同的事情?不管是什么,这通常是个坏主意....
-
将指针传递给稍后将回调到库中的不同进程(
unsigned int可以直接传递,而 64 位类型必须作为指针本身传递)。 -
不,他们没有。您可以以传统方式传递 64 位值 - 即使您编译为 32 位(如果您的指针是 64 位,您可能不是)。
-
是的,他们在这种情况下这样做:见erlang.org/doc/man/erl_driver.html#driver_output_term中的表格
-
总是使用
intptr_t有什么问题?
标签: c c-preprocessor compile-time