1. 程式人生 > >一個程式在C語言和C++語言環境下得到不同結果

一個程式在C語言和C++語言環境下得到不同結果

文章中給出了同一個程式經過C編譯器和C++編譯器編譯並執行後,得到不同的結果的兩個例子。

正如文章中所說,由於C++相容C語言,因此,許多C程式都可以採用C++編譯器編譯並執行,但是,某些程式經過兩種不同的編譯器編譯後會產生不同的結果。

(1)第一種情況是C語言對於字元常量的處理與C++不同,在C語言中,字元常量以int型別存在,而C++中,字元常量以char存在。

比如,下面這個程式:

#include<stdio.h>
int main()
{
  printf("%d", sizeof('a'));
  return 0;
}
它分別儲存為a.c和a.cpp,並分別用gcc和g++編譯後,執行後的結果分別是4和1。

這裡要注意,只是C語言中的字元常量當作int處理,sizeof(char)還是1。

(2)第二種情況是C語言對於結構體的struct關鍵字的不同處理。C語言中,無論何時宣告一個結構體變數,都要將struct帶上,但是C++中就不需要。

也就是說,C語言中,使用一個結構體變數必須在變數名前加struct,而C語言中,就可以直接使用變數名。

比如,下面的程式:

#include <stdio.h>
int T;
  
int main()
{
    struct T { double x; };  // In C++, this T hides the global variable T,
                            // but not in C
    printf("%d", sizeof(T));
    return 0;
}
C語言中,由於要引用一個結構體變數必須要加上struct關鍵字,這裡沒有加,因此,它會把T當作int型別來處理,結果是4。

C++中,引用結構體變數不需要加上struct關鍵字,因此T既可以是int T,也可以是struct T,但是由於int T在外層,它在內層不可見,因此,程式會將T當作struct T來處理,結果是8。