main 是 C 程序的入口點,其聲明格式直接影響程序的標準合規性、可移植性與啟動參數獲取能力。本文系統梳理五種常見寫法的優劣與適用場景。
| 寫法 | 推薦指數 | 標準合規性 | 參數支持 | 說明 |
|---|---|---|---|---|
int main(int argc, char *argv[]) | ★★★★★ | C89/C99/C11 | 完整命令行參數 | 標準完整形式,argc 為參數個數,argv[0] 為程序名 |
int main(void) | ★★★★★ | C89/C99/C11 | 無參數 | 標準無參形式,明確語義,推薦無參程序使用 |
int main() | ★★★☆☆ | C89 允許,C99 不推薦 | 無參數(隱式) | 隱式無參,C99 要求編譯器至少給出警告 |
main() | ★☆☆☆☆ | C89 兼容,C99 需警告 | 無參數,隱式返回 int | 早期 C 只有 int 類型,現代標準強烈不推薦 |
void main() | ☆☆☆☆☆ | 非標準 | 無參數,無返回值 | C/C++ 標準從未定義,僅部分編譯器(如 VC6)為兼容而支持,移植性極差 |
return 0; 表示程序正常退出,返回值傳遞給操作系統(Shell 中 echo $? 可查看)。main 末尾無 return,編譯器應隱式插入 return 0;。但 VC6 不插入,C-Free MinGW 插入 return 1;,行為不一致。return 0;,確保行為確定、符合標準。執行 ./program arg1 arg2 時:
argc = 3 argv[0] = "./program" argv[1] = "arg1" argv[2] = "arg2"
int main(int argc, char *argv[])int main(void)void main()、裸 main()、隱式 int main()return 0;遵循標準寫法,是編寫高質量、可移植 C 代碼的基石。