在msvc8上测试后,我发现:
在进入main()之前调用这三件事。
我的问题是:
答案 0 :(得分:5)
1:当我将程序移植到不同的编译器(gcc或armcc)或不同的平台时,这个执行顺序会不同吗?
是
2:标准C库初始化有什么作用?到目前为止,我知道setlocale()是必须的。
我确信还有其他的东西。在main启动后,您不应该依赖任何全局对象util。这意味着像std streams(std :: cin,std :: cout)这样的东西可能无法使用。
3:在全局变量的C ++构造函数中调用标准C函数是否安全?
可能不是。
答案 1 :(得分:4)
这是来自LSB(Linux标准库)工作的article,描述了__libc_start_main
在Linux上的作用。
具体做法是:
* performing any necessary security checks if the effective user ID is not the same as the real user ID. * initialize the threading subsystem. * registering the rtld_fini to release resources when this dynamic shared object exits (or is unloaded). * registering the fini handler to run at program exit. * calling the initializer function (*init)(). * calling main() with appropriate arguments. * calling exit() with the return value from main().
这是一个more detailed explanation。
这与Windows完全不同。