关于main函数声明

BluntBlade 2004-09-12 11:42:15
上接: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()这样的函数。

请大家拍砖,谢谢。
...全文
221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpunion 2004-09-13
  • 打赏
  • 举报
回复
int main(int argc,char* argv[],char* envp[]);
这种写法我所看过的书中没见过。
whyglinux 2004-09-13
  • 打赏
  • 举报
回复
第三种 main 函数形式虽然不是标准规定的两种形式之一,但是一般的编译器都支持这种形式。例如,下面的程序输出所有的环境变量,在Linux/GCC以及Windows/VC++ .NET上都通过:

int main(int argc,char* argv[],char* envp[])
{
while (*envp != NULL) {
printf("%s\n", *envp);
++envp;
}

return 0;
}
hu2006 2004-09-13
  • 打赏
  • 举报
回复
如何发新贴???
北极猩猩 2004-09-13
  • 打赏
  • 举报
回复
第三种写法不是标准的,而是编译器支持的。

这本书有太多将特定编译器的特性当作标准来看的情况
MaiCle 2004-09-12
  • 打赏
  • 举报
回复
没分,拍什么啊。哈

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧