关于main函数

main函数是个什么鬼?提到main函数大家一定不陌生。可是最近看书的时候,发现对它了解甚少。因此在这里做一些总结。

C语言基本组成单位是函数,既然是一个一个函数组成了一个完整的程序。那么程序的执行总要有个入口吧,因此呢,就规定了main函数作为程序执行的入口函数。

关于main函数原型,C++标准特别规定了main函数的原型:

int main() {/*........*/}和int main(int argc,char *argc[]){/*.......*/}

        这两种应该是最具代表性也是最具有可移植性的(比如在windows,Linux下这种写法在哪个编译器下应该都不会出错),第一个无参数,第二个可以通过命令行传参数。当然还有其他形式的,比如经常见得void main(){}以及vs平台下的int _tmain(int argc, _TCHAR* argv[]){}(该种形式在codeblocks编译器就会出错,应该还和编译器有关)。

main()既然是函数,那么就存在返回值的问题。可以返回0,也可以返回非0值。返回0值表示程序正常结束,返回非0值表示错误或者非正常退出。

实际上执行完main函数以后,main函数的返回值传给了exit(int)函数(x系统默认调用)作为其实参。比如程序正常结束,那么它的返回值就是0,此时就会调用exit(0)作为返回操作系统的代码,来指示程序执行的结果。在stdlib.h头文件中,有如下宏定义作为exit()的实参。

#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1

从宏定义可以看出,main函数正常结束返回0,然后传给exit(0),即表示正常退出。

如果我们想提前结束程序的执行,可以在其他函数中调用exit()来结束程序。

特别的,C++标准对main有几个不同于一般函数的限制:

(1)不能重载(重载了还怎么知道那是个入口函数)

(2)不能内联(不知道为什么)

(3)不能定义为静态的(不懂)。

(4)不能取地址(不懂)

(5)不能由用户自己调用(那岂不是要陷入无限循环中)

之前有个师兄面试,面试官问到这样一道题,如何在main函数执行前,打印一串字符。如果你了解程序编译过程和对象的内存分配,那么你就会知道怎么做。

全局变量的初始化是在main函数执行前,假如我们定义一个自定义全局变量,比如test类对象td,那么初始化td必然会调用其构造函数,我们在它的构造函数中定义打印命令即可。如下所示:

</pre><pre name="code" class="cpp">#include "stdafx.h"
#include <iostream>
using namespace std;
class test
{
public:
	test()
	{
		cout << "print before main" << endl;
	}
};
test td;
int _tmain(int argc, _TCHAR* argv[])
{
	cout << "print main" << endl;
	system("pause");
	return 0;
}
结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值