【发布时间】:2013-12-08 13:44:23
【问题描述】:
我需要检查 void 指针是否适合 8 个字节,所以我检查它的长度是 4 还是 8。我知道这些值只是,我可以使用 _W64,只是一个好奇的检查。
#include <windows.h>
#if (sizeof(void *) == 4)
#define IS64 0
#elif (sizeof(void *) == 8)
#define IS64 1
#else
#error "Pointer size 4 nor 8, make changes in app"
#endif
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int cmdShow)
{
if (IS64) MessageBoxA(NULL, "is 64", "info", MB_OK);
else MessageBoxA(NULL, "is 32", "info", MB_OK);
return(0);
}
此代码不起作用,我收到错误app.c(2) : fatal error C1017: invalid integer constant expression
我把宏改成:
#if (sizeof(void *) == sizeof(int32_t))
#define IS64 0
#elif (sizeof(void *) == sizeof(int64_t))
#define IS64 1
#else
#error "Pointer size 4 nor 8, make changes in app"
#endif
同样的错误。这里有什么解决方法吗?
【问题讨论】:
-
#define IS64 (sizeof(void*)==8) -
@WhozCraig 这是一个很好的宏和一个很好的解决方法。我怀疑他想要一个预处理器条件表达式,这是不允许的,因为预处理器无法明显理解 sizeof。
-
@Jekyll 当然,因此它是评论而不是答案。我不明白他为什么不只是使用 MS 预定义,但我确信这是有原因的。哦等等,他说他是,只是好奇为什么这不起作用。纳米=P
-
@WhozCraig 所以我的评论实际上就是答案?我也不确定他想达到什么目的
-
我决定使用
#define IS64 (if(sizeof(void*)==4) ? 0 : (if(sizeof(void*)==8) ? 1 : exit(1) /*Or some message box*/))。
标签: c pointers visual-studio-2008 macros windows-xp