关于main函数声明
上接:http://community.csdn.net/Expert/topic/3362/3362261.xml?temp=9.084719E-02
P83. main()可以返回任何类型的值,包括void,常见的原型如下:
void main(void);
int main(void);
int main(int argc,char* argv[]);
int main(int argc,char* argv[],char* envp[]);
个人评论:
从操作系统的角度而言,OS期待进程在结束运行时返回一个状态值,然后根据此状态值
进行一些操作。比较常见的操作是清理该进程的内存空间,等等。如果返回一个表明进程正
常结束的值,比如0,操作系统就可以快速地解决掉进程结束后的遗留问题。因此,应该在
程序中把主函数的返回值声明为整型,以期返回这样一个值。
void main(void);
这种写法我写过。以前的老编译器都可以接受,有些给出警告,有些则不。按我的想法,
应该是编译器暗中返回了某个值。此写法是非标准,不支持这样的写法。毕竟,这样写不符
合操作系统的要求。也可能会给维护人员带来阅读上的困难。
int main(void);
这种写法是标准的。没什么可说的,返回一个值做为进程状态,符合要求。
int main(int argc,char* argv[]);
这种写法也是标准的。主函数被声明为可接受OS传递进来的参数。个人认为这是最标准
的写法,不论是什么类型的操作系统,都应该支持命令行参数的传入,程序也应该接收这样
的参数。可移植性最好。
int main(int argc,char* argv[],char* envp[]);
没见过这种写法,无法予以评论。evnp做为环境参数,应该使用别的方法得到,比如
类似getevn()这样的函数。
请大家拍砖,谢谢。