關於C語言中的形參列表空着與加void的區別
來一段代碼大家看看,不,兩段吧!
int func() { printf(“hello world\n”); } int func(void) { printf(“hello world\n”);
}
請問這兩段代碼一不一樣呀?
不一樣.......
再仔細看看,嗯嗯,就是不一樣,因為一個有void ,另一個沒有嘛,還有什么本質區別沒有,似乎是沒有了,但是,將這代碼加上以下的主函數,其本質區別就顯而易見了。
int main() { int a; func(a); }
乍一看,這代碼肯定是錯的呀,編譯器大神肯定是不允許這樣爛的代碼通過編譯的,但是,當為第一段代碼時,竟然可以通過了,這是為什么呢?
大家都知道,C語言是一個風格隨意,語法不是很嚴格一門語言,這方便了許多初學者可以很輕松的入門,但是,並非隨意就好,一旦養成了隨意的習慣,就不難發現,很多問題就出現在自己的隨意之上,上面的代碼嚴格的來寫,如下:
void func(void) { printf(“hello world\n”); } int main(int argc,char argv[]) { func(); return 0; }
是不是看起來很麻煩呀,因為很多的參數在我們日常的編程之中用不到,比如:func(void)中的void我們就沒有必要要,因為空着其他人看着就知道這個函數在調用的時候不返回任何參數,也不需要任何參數,所以加void是多余的,但是,在計算機看來,空着!=void,函數不需要參數,並不代表就不可以傳入參數,只不過傳入的參數用不到而已,而void就明確表示不要任何參數,那你傳入參數的話,就是錯的,就比如你要給兩個人送同樣一個東西,這兩個人都用不到這個東西,其中一個人說了,不要這東西,而另一個把你的東西收下了,直接扔入垃圾桶一樣.而main函數里的int argc,int argv[]是啥東西,大家可以戳這里,http://blog.csdn.net/it_dream_er/article/details/45365393
我在這里就不贅述了,OK,關於main函數最后的return 0 ;我個人認為沒有必要加,因為按照C語言的機制,如果在一個函數里面沒有明確的return時,會自動返回,而且,C語言是以main函數開始,由main函數結束,所以其的返回值是返回給操作系統的,我們沒必要要,但是在一般的函數中,還是必須要的,因為返回的值是有用的,否則就返回值為空了.