來(lái)看一個(gè)C語(yǔ)言筆試題,應(yīng)該很少有人能給出正確答案。
#includeint f(){ printf("this is f ... "); return 1; } int g(){ printf("this is g ... "); return 2; } int main() { printf("%d %d ", f(), g()); return 0; }
代碼很簡(jiǎn)單,函數(shù) f 輸出一個(gè)字符串,返回整數(shù) 1。
函數(shù) g 輸出一個(gè)字符串,返回整數(shù) 2。
主函數(shù)中用 printf 輸出兩個(gè)函數(shù)的函數(shù)值,后面的參數(shù)一個(gè)是函數(shù) f,一個(gè)是函數(shù) g。
運(yùn)行程序應(yīng)該會(huì)有三行輸出,兩個(gè)函數(shù)輸出兩個(gè),主函數(shù)中再打印兩個(gè)數(shù)字。
問題是,這三個(gè)輸出的順序應(yīng)該是什么樣的?有沒有同學(xué)能看出答案,可以寫在評(píng)論區(qū)。
運(yùn)行程序,先打印 g,再打印 f,最后輸出 1 2。
這個(gè)結(jié)果確實(shí)耐人尋味,先調(diào)用了函數(shù) g,然后再調(diào)用函數(shù) f,寫在前面的反而最后調(diào)用。
不過(guò)這還沒結(jié)束,再來(lái)?yè)Q個(gè) ARM 平臺(tái)。
相同的代碼,這次卻先輸出 f,再輸出 g,順序和參數(shù)的順序一致。
好像已經(jīng)看出了結(jié)果,調(diào)用的順序不一定,得看編譯器。
最后,再來(lái)看下C語(yǔ)言官方文檔,確實(shí)提到了這一點(diǎn),函數(shù)參數(shù)的計(jì)算順序?qū)儆跒橹付ㄐ袨椤?/p>
之所以未指定,是想讓編譯器充分利用自身架構(gòu)的特點(diǎn),所以在寫代碼的時(shí)候,不要依賴他們的計(jì)算順序。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7631瀏覽量
141234 -
代碼
+關(guān)注
關(guān)注
30文章
4895瀏覽量
70551
原文標(biāo)題:又一個(gè)無(wú)解筆試題
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
常見電子類硬件筆試題整理(含答案)
最全的硬件工程師筆試試題集
常見電子類硬件筆試題整理(含答案)
【硬件方向】名企面試筆試真題:大疆創(chuàng)新校園招聘筆試題
硬件工程師面試/筆試經(jīng)典 100 題

深入理解C語(yǔ)言:C語(yǔ)言循環(huán)控制

硬件工程師面試必看試題(經(jīng)典)
C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別
C語(yǔ)言與Java語(yǔ)言的對(duì)比
C語(yǔ)言與其他編程語(yǔ)言的比較
C++語(yǔ)言基礎(chǔ)知識(shí)
按照這樣學(xué)習(xí)C語(yǔ)言,成為卷王不是夢(mèng)!

評(píng)論