????????主函數 main 要寫成 int 返回值?
????????main(int argc, char* argv[])?為什么里面沒有 cin
也能讀到數據,數據是怎么傳進去的?
????????本文將一步步回答這些問題。
1. 為什么 main
要寫成 int
????????C++ 標準(ISO/IEC 14882)規定,main
必須返回 int
,這是程序向操作系統報告執行結果的方式
原因
操作系統約定:
????????程序退出時需要給系統一個退出碼(Exit Code),整數最合適
歷史兼容性:
????????從 C 語言時代就規定了 int main
,C++ 繼承下來
? ? ? ? 0表示程序成功結束
????????非 0 表示發生錯誤,數值可以代表不同的錯誤類型。
示例
int main() {if (some_error_happened) {return 1; // 返回 1 表示出錯}return 0; // 返回 0 表示成功
}
????????在 Linux / macOS 終端:
./my_program
echo $?
????????在 Windows 命令行:
my_program.exe
echo %ERRORLEVEL%
2. main(int argc, char* argv[])
是什么意思?
這是帶參數的 main
形式,用來接收命令行參數
argc
(argument count):命令行參數的個數(包含程序名本身)argv
(argument vector):一個字符串數組,存放每個參數
示例
#include <iostream>
using namespace std;int main(int argc, char* argv[]) {cout << "參數個數: " << argc << endl;for (int i = 0; i < argc; i++) {cout << "argv[" << i << "] = " << argv[i] << endl;}return 0;
}
運行:
./my_program apple banana
輸出:
參數個數: 3
argv[0] = ./my_program
argv[1] = apple
argv[2] = banana
3. 為什么不用 cin
也能讀到數據?
????????這是因為 argc/argv
的數據是在程序啟動之前就由操作系統傳給你的,并不是在程序運行中輸入的
流程大致如下:
用戶在命令行輸入:
./my_program apple banana
操作系統解析命令,把每個空格分隔的部分作為一個參數
把這些參數存到內存里
調用
main(argc, argv)
,把參數個數和參數地址直接傳進去
而 cin
是運行時從標準輸入讀取,需要用戶在程序執行過程中輸入
4. 怎么傳入命令行參數?
命令行方式
g++ main.cpp -o my_program
./my_program apple banana "hello world"
Visual Studio
右鍵項目 → 屬性。
配置屬性 → 調試 → 命令參數 中填寫參數。
VS Code
在 .vscode/launch.json
中配置
{"version": "0.2.0","configurations": [{"name": "Run with args","type": "cppdbg","request": "launch","program": "${workspaceFolder}/my_program","args": ["apple", "banana", "hello world"],"cwd": "${workspaceFolder}"}]
}