日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中函数的参数列表为空和void的区别

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中函数的参数列表为空和void的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



C標準和C++標準在main函數上是有區別的,所以我分別詳細來介紹他們。

對于C語言:

??C89標準的main()函數是可接受的,盡管現在建議是使用C99的標準。C99標準只定義了如下兩種可接受的函數原型:

int?main(void)
int?main(int?argc,?char?*argv[])

??以上函數原型微小的變形也是可以被接受的,比如int可以被typedef定義為int的名字所代替,argv的類型也可以寫成char?**argv,等等。

第一種函數原型選擇適用你不許要訪問命令行參數的時候。

對于第二種函數原型選擇,如果你喜歡的話,標識符argc和argv的名字可以改變,但是堅持使用argc/argv是一個慣例。

main()函數的返回值必須是一個int型,返回值給main()函數的調用者傳遞一個int類型的狀態。

在C89標準下,main()函數中的return語句是必須的;然而在C99標準下,如果沒有寫return語句,默認(隱含的)會return?0。

?

對于C++語言:

可以被接受的使用方式有:

int?main(int?argc,?char?*argv[])
int?main()

第一種遵循被C99中使用的慣例。

第二種適用于不需要訪問命令行參數的環境,相當于C99中的int?main(void)。

return必須返回一個int型數值,默認返回0(但是標準中并沒有要求)。

?


int?main()和int?main(void)的區別

C程序員通常誤認為下面的函數原型是不要參數的:

int?foo();

事實上,這個函數是被認為需要不確定個數的參數。告訴編譯器函數為不帶參數的正確做法是:在括號中使用void關鍵字。

?

void?main()的細節(機理):

C和C++中正常的函數調用和返回,假如你不想從一個函數中返回任何東西,你可以定義函數的返回值類型為void。例如,一個函數不帶參數,無返回值的函數原型可以定義為:

void?foo(void);

一個正常的誤解是這樣的邏輯也被應用于main函數。是的,它不可以,main函數是特殊的,你應該遵循標準并定義函數的返回值為int。但是在一些特殊的系統中是可以的。如果你不確定你正在使用的是否是特殊系統之一的話,那答案就是“不是”。如果是特殊系統的話,你應該已經知道了。

提醒你如果你在論壇上發帶有"void?main"的代碼,會有人來告訴你要你糾正它。如果你回復說“我的老師說這樣是可以的”也無用。老師們有錯誤的習慣。安全起見,在論壇上只貼標準的代碼,然后你會發現人們集中在回答你的問題,而不是在告訴你函數原型的事情上浪費時間。

?

但是int?main(int?argc,?char?*argv[],?char?*envp[])是怎么回事呢?

作為對標準的擴展,在一些系統中一個附加的main函數參數可以被用來獲得并訪問環境變量。這并不保證在所有的編譯器上都能正常工作,如果你想讓你的代碼可移植,那么請慎重使用它。


  • #include <stdio.h>
  • void fnc(void) {
  • puts("void parameter list");
  • }
  • void fnc_1(unsigned short n) {
  • printf("%hx\n", n);
  • }
  • void fnc_2(unsigned int n0, unsigned int n1) {
  • printf("%x %x\n", n0, n1);
  • }
  • int main(void) {
  • void (* ptr_fnc)(); //可變參數列表
  • ptr_fnc = fnc;
  • ptr_fnc();
  • ptr_fnc = fnc_1;
  • ptr_fnc(0x1);
  • ptr_fnc = fnc_2;
  • ptr_fnc(0x2, 0x3);
  • return 0;
  • }



  • 總結

    以上是生活随笔為你收集整理的C语言中函数的参数列表为空和void的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。