变量声明和函数声明的意义详解
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
C語言為什么要規(guī)定先聲明變量呢?為什么要指定變量的名字和對應的數(shù)據(jù)類型呢?(1)建立變量符號表。
?? ?通過聲明變量,編譯器可以建立變量符號表,如此一來,程序中用到了多少變量,每個變量的類型是什么,編譯器非常清楚,是否使用了沒有聲明的變量,編譯器在編譯期間就可以發(fā)現(xiàn)。從而幫助了程序員遠離由于疏忽而將變量名寫錯的情況。
(2)變量的數(shù)據(jù)類型指示系統(tǒng)分配多少內(nèi)存空間。
(3)變量的數(shù)據(jù)類型指示了系統(tǒng)如何解釋存儲空間中的值。
?? ?同樣的數(shù)值,不同的類型將有不同的解釋。int占據(jù)4個字節(jié),float也占據(jù)4個字節(jié),在內(nèi)存中同樣也是存儲的二進制數(shù),并且這個二進制數(shù)也沒有標志區(qū)分當前是int型還是float型。如何區(qū)分?就是通過變量的數(shù)據(jù)類型來區(qū)分。由于聲明建立了變量符號表,所以系統(tǒng)知道變量該如何解釋。
(4)變量的數(shù)據(jù)類型確定了該變量的取值范圍
?? ?例如短整型數(shù)據(jù)取值-32767~32767之間。
(5)不同的數(shù)據(jù)類型有不同的操作
?? ?如整數(shù)可以求余。C語言用符號”%”表示求余。整數(shù)可以,實數(shù)不可以。
函數(shù)聲明的意義:
是的,函數(shù)也應該是先定義后引用才對,如果引用前未定義,解決的辦法就是在引用前聲明一下函數(shù)原型就可以了。但是你也許發(fā)現(xiàn)了,在你曾經(jīng)的練習代碼中,你有時候沒有遵循以上原則,似乎也編譯通過并得到了正確的結(jié)果。
?
為什么要聲明:
如果我的引用在定義之前發(fā)生,那么我通過原型去聲明一個函數(shù)的意義在于告訴編譯器,我的這個函數(shù)的參數(shù)個數(shù),每個參數(shù)的類型,以及返回值類型。由此,在參數(shù)入棧的時候才會分配合適的空間給每個參數(shù)。
如果你在引用之前并未聲明函數(shù),并且函數(shù)的定義滯后于引用,這在gcc中這并不會引起編譯錯誤。首先在引用發(fā)生時編譯器通過函數(shù)名稱可以在將來對應到函數(shù)的入口點(如果你壓根兒沒定義該函數(shù),那就另當別論了),其次編譯器會在無法確定該函數(shù)的參數(shù)類型的情況下,視其為int類型,包括返回值通通視為int類型,所以如果你的實際參數(shù)類型寬度大于int的話,會導致截斷發(fā)生,因此,你得到正確結(jié)果的可能性渺茫,(周同學發(fā)生的問題就是float被強制轉(zhuǎn)換為int了。)
?
以上觀點純屬我個人通過技術(shù)方法驗證后的推理,并沒有仔細閱讀權(quán)威的文檔(沒去找),所以僅供參考!如果你有別的觀點請回復探討,共同進步!
?
總結(jié)
以上是生活随笔為你收集整理的变量声明和函数声明的意义详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5种流行的Linux发行版:你更喜欢哪一
- 下一篇: 音视频即时通讯二次开发