準確地說,不可以。

C99 Standard 6.5.3.4 規定sizeof是implementation defined。參見: http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf而且據我所知還沒有一個安全的C/C++ macro可以讓人分別出32bit和64bit的target platform。
不能,因為這個是由編譯器來決定的,而不是操作系統


不可以,或者說沒必要。sizeof是編譯時確定,由編譯時的編譯參數確定。64位的處理器也可以用32位表示內存。就像在64位平台可以編譯和運行32位的程序。
這個是由編譯器編譯時決定的
#include&int main(){unsigned int i = 0xffffffff;if ( i &> 0)

{

printf("64bit
");}else{printf("32bits
");}return 0;}
不可以。還有個x32 abi呢。


當然可以! 而且編譯器是和體系結構相關的。比如,short這種類型在PC、DSP、ARM上的類型就不同。可以參見linux中各種體系的types.h

我們知道,C/C++中,32位系統下編譯生成的程序,書寫代碼時,整形數值默認取值範圍是-2^31至2^31-1,加上數值後綴L,表示長整型,取值範圍也是-2^31至2^31-1,加上LL表示嘗嘗整型數值,取值範圍是-2^63至2^63-1。64位系統下編譯生成的64位程序(為什麼指明說64位的程序,因為64系統下也可以編譯生成32的位的程序),整型數值默認取值範圍是-2^31至2^31-1,加上數值後綴L,表示長整型,取值範圍也是-2^63至2^63-1,加上LL表示長長整型數值,取值範圍是-2^63至2^63-1。所以根據數值後綴L可以判斷系統是32位還是64位,實際上我們是利用最大值是否溢出情況來做判斷,示例代碼如下:

```

#include &

using namespace std;

int main()

{

long ldTmp=1L&

cout&

cout&

if(ldTmp)

cout&

else

cout&

}

```

使用`g++ -m64 testSysDigits.cpp -o a64.out`生成64位程序輸出結果為:

```

sizeof(long):8

ldTmp:4294967296

64 bits

```

使用`g++ -m32 testSysDigits.cpp -o a32.out`生成32位程序輸出結果為:

sizeof(long):4

ldTmp:0

32 bit

還有其他的方法,具體參見:https://blog.csdn.net/K346K346/article/details/80427245


推薦閱讀:
相关文章