我正在寻找一种方法可靠地确定C++代码是在32位还是64位编译.我们已经提出了我们认为使用宏的合理解决方案,但很想知道人们是否可以想到这可能会失败的情况,或者是否有更好的方法来做到这一点.请注意,我们正在尝试在跨平台的多编译器环境中执行此操作.
#if ((ULONG_MAX) == (UINT_MAX))
# define IS32BIT
#else
# define IS64BIT
#endif
#ifdef IS64BIT
DoMy64BitOperation()
#else
DoMy32BitOperation()
#endif
Run Code Online (Sandbox Code Playgroud)
谢谢.
我最近在尝试使用gcc编译时遇到以下错误:
错误:在令牌之前缺少二元运算符"("
Web和SO搜索提出了这个错误的几个具体示例,并通过特定的代码更改来修复它们.但我没有找到导致发出此错误的条件的一般描述.
何时以及为什么gcc会发出此错误?
有没有人引用海报/单页pdf或类似的东西与C语言的八个翻译阶段列表(第一个是三字母翻译)?我想在我的电脑旁边的墙上挂一个印刷品.
更新:抱歉忘记指定.我对C90很感兴趣(虽然C99可能非常接近,_Pragma如pmg所说,答案是C99特定的,我想避免这种情况).
我有这个:
#if sizeof(int)
#error Can't use sizeof in a #if
#endif
Run Code Online (Sandbox Code Playgroud)
我得到这个编译器错误:
missing binary operator before token "("
Run Code Online (Sandbox Code Playgroud)
为什么我不能在这里使用sizeof运算符?
我有这个不能编译与Visual Studio的错误"致命错误C1017:无效的整数常量表达式".我该怎么做?
template <class B>
A *Create()
{
#if sizeof(B) > sizeof(A)
#error sizeof(B) > sizeof(A)!
#endif
...
}
Run Code Online (Sandbox Code Playgroud)