tcjsea 发表于 2013-05-07 21:36

没有main函数的c程序

今天看了几个程序文件,找了半天,没找到main函数,倒是有几个含有main字段的函数,但是这几个文件确实可以make成可执行文件,不过这个程序依赖了很多库。我考虑以下问题:
1、这个程序是不是真的没有main函数,是不是隐含定义了,还是说被包含在其它的库中?
2、有没有不包含main的c程序,可以编译成可执行文件,如果有的话,如何做到?
敬请各位大虾指教!!!

井蛙夏虫 发表于 2013-05-07 23:40

1. 不知道你的程序所以不好说。但可能包含在库中,比如google test就可以这样,你通过链接一个库从而具有main方法,但这种main方法只是提供比较通用的基本功能。
也可能工具生成,比如lex工具在你没有提供main方法时,它在通过.l文件生成.c文件时就可以包含进来一个基本功能的main方法。

2.c标准定义了两种实现:hosted implementation和freestanding implementation。进而对应两种环境。对于hosted环境必须从main开始,但对于freestanding环境,入口函数是
实现定义的。glibc的程序启动流程一般是:__start --> main; 它的真正入口是__start。ld链接器有一个-e参数可以指定这个入口,默认设置为__start,你可以修改它,不过修改后
你就不能使用很多glibc的库功能了。

relipmoc 发表于 2013-05-08 09:51

学习2楼.没有main,最多编译通过,link时会报告找不到main的错误.
只要有main,main函数塞到任何一个地方都可以,因为它不用声明

tcjsea 发表于 2013-05-08 19:55

受教了,感觉很高深啊,多谢指教!
页: [1]
查看完整版本: 没有main函数的c程序