2011-02-03 94 views
3

我有一個C++預處理指令是這樣的:C++預處理指令限制

#if (SOME_NUMBER != 999999999999999) 
// do stuff 
#endif 

999999999999999明顯大於2 ,因此該值將不裝配到一個32位整數。預處理器能夠正確使用64位整數來解決比較問題,還是會截斷一個或兩個值?

+0

當您嘗試時發生了什麼? – 2011-02-03 18:39:06

+0

它似乎工作,但我不知道這是否僅僅是因爲它將它們都截斷爲INT32_MAX。 – Colen 2011-02-03 18:51:58

回答

2

嘗試使用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後綴。

1

您可以嘗試使用 「limits.h中」 中定義的常量UINT_MAX

#if (SOME_NUMBER != UINT_MAX) 
// do stuff 
#endif 

UINT_MAX值取決於整數大小而不同。

1

預處理器算術工作正常常量表達式(參照標準,16.1/4),不同之處在於intunsigned int如同它們是longunsigned long進行處理。因此,如果您有64位類型,則可以正常使用它。