不同。雖然功能近似,但函數(shù)會產(chǎn)生獨立代碼,每次調(diào)用執(zhí)行的是同一個位置的代碼,無論調(diào)用多少次。
成都創(chuàng)新互聯(lián)公司長期為上千多家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為阜城企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、網(wǎng)站制作,阜城網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
當出于某些原因需要對數(shù)據(jù)做出修改,只要修改宏定義就行了,而不必在整個源文件中修改。而至于某些人說的可以加快CPU處理速度、宏運行的速度更快,我并不認同。
可以把宏理解成拼字游戲,它功能很強大,但是強大到使用不好就會有副作用。C++有很多語言設(shè)施用來完全特定功能的宏,如const,inline,template,就是為了讓大家少用宏。
c語言中主函數(shù)中定義的變量只能在主函數(shù)中使用,所以你還得再定義一個變量。當然,捏可以把主函數(shù)中定義的這個變量傳遞給被調(diào)用的函數(shù)作為參數(shù)。
當然可以,宏定義是預處理的。在什么地方寫都可以。編譯器只是把宏定義的作替換。定義好的宏,在真正編譯的時候被所定義的塊給替換了。
現(xiàn)在的教科書啊, c語言的標準定義,是不包括宏的。宏是編譯器的一部分,我們通常寫代碼,為了代碼高可用等,一般離不開使用宏。
void 類型代表通用類型,很容易通過類型轉(zhuǎn)換為其他類型。
函數(shù)的作用主要是為了重復調(diào)用,當一段代碼在多處使用時,就要考慮寫函數(shù)了。還有一個方面,用了函數(shù),代碼看起來會很簡潔。
(1)一種是需要建立存儲空間的(定義、聲明)。例如:inta在聲明的時候就已經(jīng)建立了存儲空間。(2)另一種是不需要建立存儲空間的(聲明)。例如:externinta其中變量a是在別的文件中定義的。
函數(shù)可以復用,可以有效地減少代碼量,提高了代碼的可讀性和可維護性,使得程序更容易維護和擴展。
函數(shù)就是為了代碼重用,同樣一段代碼,可以在很多地方調(diào)用,避免重復寫代碼了。函數(shù)也可以沒有返回值,但是一般認為,程序就是為了當你給它一個輸入,它可以按照預想的結(jié)果給你返回運算結(jié)果,就是如此。
很重要。函數(shù)一個執(zhí)行體,雖然理論上來說,不用函數(shù)也可以。比如說比較大小的函數(shù)。你可以直接在main函數(shù)里面比較,但是如果需要用的次數(shù)比較多的話,就會多出很多冗余的代碼。
是的,如果這是某書上的做法,那么,我只能說它為你們提供了一個錯誤的榜樣。這樣使用gets()已經(jīng)發(fā)生了溢出!這是gets()不檢查數(shù)據(jù)邊界的bug造成的。
這是對程序產(chǎn)生BUG,出現(xiàn)不可靠性的一個描述,有些函數(shù)在某些意外情況會導致程序陷入不可控狀態(tài),僅僅是PC上運行最多也就是退出而已,但是如果是運行在飛機等系統(tǒng)里的話,就會有大麻煩,說危險也不為過。
gets確實是不安全的,因為無法知道該函數(shù)返回的數(shù)據(jù)有多長。
gets(a);當你輸入的東西遠比12要長時,他還是會接收并寫入空間。這樣就溢出了,覆蓋掉后面的相應空間。也就是說他寫入了不該他來寫的東西。如果寫得設(shè)計好點,完全可以通過這個去完成一些不好的事情。
gets從標準輸入設(shè)備讀字符串函數(shù)??梢詿o限讀取,不會判斷上限,以回車結(jié)束讀取,所以程序員應該確保buffer的空間足夠大,以便在執(zhí)行讀操作時不發(fā)生溢出。
C語言的gets函數(shù)一般包含在stdio.h頭文件里,如果沒有包含比頭文件那可能會有問題。第二種情況包含了還出問題,說明你的編譯器已經(jīng)不支持這個函數(shù)了,這個函數(shù)非常不安全,容易造成溢出,建議換成fgets函數(shù)。