[問題] C檔與CPP檔執行結果不同

看板C_and_CPP (C/C++)作者 (hth9494)時間10年前 (2015/12/31 17:03), 編輯推噓0(008)
留言8則, 3人參與, 最新討論串1/1
大大們好,今天我在練習sizeof函數時遇到奇怪的現象,以下截圖來表示 我的操作過程。 我的程式碼: #include <stdio.h> int main(){ printf("%d\n", sizeof('a')); printf("%d\n", sizeof(char)); getchar(); } ------------------------------以下是步驟-------------------------- 1、一開始用cpp檔來存這段程式碼,結果是印出兩個1 http://imgur.com/Wl0FvWh
2、然後我在右邊方案總管的地方,把cpp改成c,結果印出4和1 http://imgur.com/7TixZdb
3、接著我把第二個printf註釋掉,結果印出4,這時還是c檔 http://imgur.com/ZtHWIHS
4、然後一樣的代碼我把c再改成cpp,結果卻是4而不是1 http://imgur.com/GSi9yIS
5、最後我把註釋復原,此時印出兩個1,和一開始的結果一樣 http://imgur.com/OY4Tc21
有兩個問題想請問各位大大 1、用c檔和cpp檔印出sizeof('a')的結果為什麼不一樣呢?那'a'到底多大? 2、為啥同是cpp檔的情況下,印出來的結果一下是1一下是4,可以讓它這樣 變來變去的嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.63.50 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1451552611.A.85A.html

12/31 17:05, , 1F
也預祝大家新年快樂哦~
12/31 17:05, 1F

12/31 17:06, , 2F
c的sizeof('a') == sizeof(int)
12/31 17:06, 2F

12/31 17:07, , 3F
c++的sizeof('a') == sizeof(char)
12/31 17:07, 3F

12/31 17:08, , 4F
還有sizeof回傳型態是size_t, printf 裡面要用 %zd
12/31 17:08, 4F

12/31 20:08, , 5F
char ch = 'a';
12/31 20:08, 5F

12/31 20:08, , 6F
printf("%d\n", sizeof(ch));
12/31 20:08, 6F

12/31 20:10, , 7F
3.到4.沒變我猜是因為程式碼沒有修改就沒有重新編譯?
12/31 20:10, 7F

12/31 20:16, , 8F
的確跳過編譯了,你把Source.obj刪除後再build就正確
12/31 20:16, 8F
文章代碼(AID): #1MXEzZXQ (C_and_CPP)
文章代碼(AID): #1MXEzZXQ (C_and_CPP)