【例3.7】程式的執行結果取決於編譯系統的例子。
#include void main()
如果使用vc,輸出結果為「73391,8256.670000」。如果使用borland c++,則輸出為「7855,8256.670000」。這是因為前者為int分配4個位元組;後者為int分配2個位元組,結果a=-401,變成了8256-401=7855。如果將宣告改為
long a=65135;
對vc來說,並沒有影響。但對borland c++來說,雖然計算結果對了,但輸出函式printf的引數不匹配,仍然得不到正確結果。如果將它改為格式
printf("n%ld,%f",a,i);
則borland c++也能得到正確結果。
由此可見,程式設計時還要考慮自己的使用環境,不能生搬硬套。
寫程式時,也要注意不同編譯系統的區別。
【例3.8】執行結果取決於編譯系統的例子。
#include void main()
這個程式使用m的方式會產生歧義。因為在呼叫函式時,c標準並沒有規定實引數的求值順序。m和m++是兩個表示式的值。vc是自左而右求值,先使用m,然後自增1,所以輸出是「5,5」;borland c++是自右而左求值,第乙個m為5,但它使用之後變為6,將6作為第二個m值,所以輸出是「6,5」。
在程式設計時,應避免使用可能產生歧義的語句,更不要寫別人看不懂,也不知道系統如何執行的程式。尤其是使用「++」和「--」時,更要小心。
Linux系統C語言 編譯除錯
1 gcc gnu compiler collection 分為四個階段 a 預處理pre processing gcc e test.c o test.i b 編譯compiling gcc s test.i o test.s 組合語言檔案 c 彙編assembling gcc c test.s ...
《C語言解惑》 2 11 指標的困惑
例2.17 分析下面程式的執行結果。include void main 這個程式執行後給出乙個奇怪的輸出 50,1250 a p 的表示式是對的,即 225 50 但 bx p 應是 50 25 25 50 為何變成1250了呢?原來程式多了乙個 號,使計算c的表示式變為 c b x 也就是原來 被...
C語言的注意點
參考 include int main a typedef struct bb printf d d 2f sizeof a sizeof b sizeof a sizeof b 輸出 24 16 0.00 我的電腦是64位 結構體 涉及記憶體對齊以提高記憶體的利用率,位段的使用。因為32位機器的記...