我有一個C++預處理指令是這樣的:C++預處理指令限制
#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif
999999999999999明顯大於2 ,因此該值將不裝配到一個32位整數。預處理器能夠正確使用64位整數來解決比較問題,還是會截斷一個或兩個值?
我有一個C++預處理指令是這樣的:C++預處理指令限制
#if (SOME_NUMBER != 999999999999999)
// do stuff
#endif
999999999999999明顯大於2 ,因此該值將不裝配到一個32位整數。預處理器能夠正確使用64位整數來解決比較問題,還是會截斷一個或兩個值?
嘗試使用LL後綴:
#if (SOME_NUMBER != 999999999999999LL)
// do stuff
#endif
在我的gcc這項工作很好:
#include <iostream>
#define SOME_NUMBER 999999999999999LL
int main()
{
#if (SOME_NUMBER != 999999999999999LL)
std::cout << "yes\n";
#endif
return 0;
}
有或無的LL後綴。
您可以嘗試使用 「limits.h中」 中定義的常量UINT_MAX
:
#if (SOME_NUMBER != UINT_MAX)
// do stuff
#endif
UINT_MAX
值取決於整數大小而不同。
預處理器算術工作正常常量表達式(參照標準,16.1/4),不同之處在於int
和unsigned int
如同它們是long
和unsigned long
進行處理。因此,如果您有64位類型,則可以正常使用它。
當您嘗試時發生了什麼? – 2011-02-03 18:39:06
它似乎工作,但我不知道這是否僅僅是因爲它將它們都截斷爲INT32_MAX。 – Colen 2011-02-03 18:51:58