來看一個C語言筆試題,應該很少有人能給出正確答案。
#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; }
代碼很簡單,函數(shù) f 輸出一個字符串,返回整數(shù) 1。
函數(shù) g 輸出一個字符串,返回整數(shù) 2。
主函數(shù)中用 printf 輸出兩個函數(shù)的函數(shù)值,后面的參數(shù)一個是函數(shù) f,一個是函數(shù) g。
運行程序應該會有三行輸出,兩個函數(shù)輸出兩個,主函數(shù)中再打印兩個數(shù)字。
問題是,這三個輸出的順序應該是什么樣的?有沒有同學能看出答案,可以寫在評論區(qū)。
運行程序,先打印 g,再打印 f,最后輸出 1 2。
這個結果確實耐人尋味,先調用了函數(shù) g,然后再調用函數(shù) f,寫在前面的反而最后調用。
不過這還沒結束,再來換個 ARM 平臺。
相同的代碼,這次卻先輸出 f,再輸出 g,順序和參數(shù)的順序一致。
好像已經看出了結果,調用的順序不一定,得看編譯器。
最后,再來看下C語言官方文檔,確實提到了這一點,函數(shù)參數(shù)的計算順序屬于為指定行為。
之所以未指定,是想讓編譯器充分利用自身架構的特點,所以在寫代碼的時候,不要依賴他們的計算順序。
-
C語言
+關注
關注
180文章
7630瀏覽量
140453 -
代碼
+關注
關注
30文章
4887瀏覽量
70268
原文標題:又一個無解筆試題
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
常見電子類硬件筆試題整理(含答案)
【硬件方向】名企面試筆試真題:大疆創(chuàng)新校園招聘筆試題
硬件工程師面試/筆試經典 100 題

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

評論