如下程式,定義了 一個函式f(a)
沒有申明引數a的資料型別,也就是K&R 《C程式設計語言》里說的沒有函式原型?
#include <stdio.h>
#include <math.h>
double f (a)
{
return a*1;
}
int main()
{
printf("result is=%f\n",f(10.8f));
return 0;
}
然后編譯執行,發現結果不對,
result is=-1610612736.000000
按照 K&R《C程式設計語言》中文版第36頁的說明,10.8f應該自動轉成double,然后回傳的啊
為啥結果是-1610612736.000000 ?而不是 10.8?
uj5u.com熱心網友回復:
make c
cc c.c -o c
c.c: In function ‘f’:
c.c:4:8: warning: type of ‘a’ defaults to ‘int’ [-Wimplicit-int]
double f (a)
這是編譯程序和結果;make按照C語言的語法編譯的,G++不支持樓主的這種方法。通過編譯結果可以確定,形參a當成int處理。
結果是
result is=1.000000
看到樓主最近在糾結“函式原型”這個名詞,看書不建議鉆牛角尖,編程還是要注重實踐,有些名詞,定義不明白,可以先放放,后面的學習和實踐中會慢慢解決你之前的疑問,另外,實踐也要去指導理論,將兩者相結合來學習吧
uj5u.com熱心網友回復:
為你超強的方向感鼓掌。現代的我們讀經典的時候也要辯證,也要批判地繼承嘛。
讀K&R更多的是感受其中的藝術氣息--BTW,翻譯程序很難保證這一點,建議原文。
而不是當作教材。
uj5u.com熱心網友回復:
稍稍思考一下,猿s和編譯器從某個恰當的角度看,是處于對立狀態的。K&R當年的那段描述是在建議編譯器應該如何遷就懶惰的猿s,其實那話兒根本就不是寫給猿s的,也不該作為猿s偷懶的借口。
你都下決心學C語言了,難道你還承認自己懶惰,偏偏懶得寫一個型別名?
一頭合格的C猿,壓根不會考慮偷那點小懶。
uj5u.com熱心網友回復:
不是偷懶,是想搞明白為什么。。
uj5u.com熱心網友回復:
你的思路仍然有問題。比如說,我是說假如
有本家長手冊,上面寫著:可以嚇唬孩子說再不聽話就打斷他的腿,但是你不能真的打斷他的腿。
這句話被孩子看到了,作為正常孩子,難道還去測驗一下,故意不聽話會不會被親爹打斷腿?
我的意思是,咱學習是為了寫正確的代碼,沒必要急于研究每一種錯誤的寫法為什么錯,是怎么錯的。
一方面還有大把的演算法啊什么的天空等著咱去征服;
另一方面隨著學習逐步前進,有些事“等你長大了自然就明白了”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248224.html
標籤:C語言
下一篇:請教原型的概念,謝謝
