用过ACE的都知道,程序的main函数必须写成int main (int argc, char *argv[])的形式,这是为什么呢,看了ACE的源码才知道,原来是……
看ace/OS_main.h中的一段代码,就会恍然大悟:
原来ACE把main定义成一个宏,该宏首先对函数进行前项声明: ace_main_i (int, char *[]);
接着定义ACE_Main类,该类实现了ACE_Main_Base基类中的纯虚函数run_i,在ACE_Main::run_i中调用ace_main_i函数。
再接着又定义了ACE_MAIN函数,而ACE_MAIN是一个宏:“#define ACE_MAIN main”,也就是说,ACE_MAIN这里才真正定义了main函数。
再接下来就是ace_main_i函数的定义,到这里宏扩展完毕,接下来就是我们自己写的main函数的参数列表和函数原型。
总结起来,就是ACE把我们自己写的main函数修改成ace_main_i函数,然后自己又重新定义了一个main函数,在ACE的main函数里面,声明ACE_Main对象,并调用其run方法,run函数对ACE做一些必要的初始化后,再调用run_i,run_i又调用ace_main_i,从而进入我们自己定义的main代码。
上述的run、run_i以及ACE自定义的main函数都是int main (int argc, char *argv[])的形式,也因此,我们的main函数也就必须定义成这种形式,否则会在链接时报错。 |
http://space.baidu.com/gamedot/blog/item/5373448bb3c328dafc1f1014.html