關於C語言中的形參列表空着與加void的區別

關於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函數結束,所以其的返回值是返回給操作系統的,我們沒必要要,但是在一般的函數中,還是必須要的,因爲返回的值是有用的,否則就返回值爲空了.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章