main() 函数是C/C++程序的入口函数,整个程序从此处开始执行,当然我们可以通过链接脚本修改入口函数,对于一个可执行程序,main函数必须存在且唯一,其定义如下:
版本1:
int main()
{
// 程序代码
return 0;
}
版本2
int main(int argc, char* argv[])
{
// 程序代码
return 0;
}
其中:
- int 表示函数返回值的类型,表示程序结束时返回一个整型值。
- main 是函数名,表示主函数,程序从这个函数开始执行。
- int argc 表示命令行参数的个数,一般至少为1(即可执行文件的名称),可以为空。
- char *argv[] 是一个字符串指针数组,每个元素指向一个命令行参数的字符串,第一个位置通常是可执行程序的全路径。
argv数组的长度通常是argc + 1
,argv[argc]
的值为NULL。
- 返回语句可以省略
注意,在 C++ 中,也可以不写返回语句来结束 main() 函数,例如:
int main(int argc, char* argv[])
{
// 程序代码
}
当没有返回语句时,默认会在主函数结束时返回值 0。
-
main函数可以当普通函数调用
-
在执行 main() 函数中的 return 语句(或者在主函数结束时隐式返回)时,相当于正常离开该函数,并且会销毁所有自动存储期的对象,然后将return 语句的返回值传递给 std::exit调用。std::exit 然后会销毁所有静态对象并终止程序。
简单来说,return 语句让程序从main() 函数中正常离开,并返回一个整型值作为程序的退出状态,同时会执行自动对象的析构函数。如果 main() 函数没有定义返回值,等价于 return 0; 如果通过 std::exit 函数退出程序,则会立即停止程序的运行并退出。
#include <string>
#include <iostream>
class Fuck {
public:
std::string str;
~Fuck() {
std::cout << str << "\n";
}
};
static Fuck a{
"a"};
int main() {
Fuck b{
"b"};
exit(1);
}
对于上面这个代码,只会打印a。
- 不能对main函数的地址进行赋值。