您的位置:首页 > 编程语言 > C语言/C++

关于C语言的main函数

2013-04-11 08:54 239 查看
最近回看了一本C语言方面的书,准备复习一下C语言的基础知识,正如大多数C语言课本一样,第一个例子总是简单的"Hello World",如下:

main()

{

printf("Hello World!\n"); //输出字符串并换行

}

现在再看这个例子,就会发现有几个问题。首先,C语言中每个函数都会返回值,包括空类型。上面的例子中,虽然没有指明main函数的返回值类型,编译器会使用默认的空类型作为返回值。但是,这显然会给初学者造成疑惑,是不是所有函数都可以这样写,表示没有返回值呢?对于这个简单的例子,应该改写如下:

void main()

{

printf("Hello World!\n"); //输出字符串并换行

return (void);

}

上面代码显示的告诉编译器,main函数的返回值类型会void型,并显示调用return语句。这样的好处就是统一各函数的书写风格,符合C语言的规范。

众所周知,main函数是程序的入口函数,是由系统调用的,在Win32中则是由C Runtime的Startup代码调用的。虽然整个程序中也不会用到main函数的返回值,但是我们不能确定系统在调用main后会不会使用该返回值。例如,当我们调用CreateProcess创建一个进程时,系统会调用指定程序的main函数,当程序退出时,再调用GetProcessExitCode函数获取该程序的返回值,以判断程序是否执行成功,这里,系统就会将main函数的返回值返回给我们。正如上面的例子所示,main函数返回的是空类型,那它是什么值呢?

也许系统会返回一个随机的值给我们,但是我们也就不能判断这个程序执行是否成功了。所以,main函数的最好能够有一个明确的返回值,如int型,这也正是main函数的正确声明,如下:

int main()

{

printf("Hello World!\n"); //输出字符串并换行

if (...) //成功返回0

{

...

return err;

}

else

{

...

return err; //出错返回错误码

}

}

可以举一反三的是,在写自定义函数时,最好也能够指定一个返回值,表明程序是否执行正确,在这一点上Windows的API函数就是很好的例子,大多数API函数都会返回一DWORD值,表明函数是否执行成功,而数据的传递都是通过参数进行的,包括输入、输出参数,而返回值值表明是否执行成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息