最初发表在QQ空间(这里贴图不方便),全文见 跑在main之前 和 跑在main之前 (2) ,有图有真相。
通常这是一个面试题,如何让一段代码跑在main()函数前面。一个熟练的C++开发者能够轻易给出答案,即静态初始化。
在C里面又如何呢,有没有办法做到这点?下面讲一个VC里的方法。
int initBeforeMain() { printf( "initBeforeMain (%p)/r/n", initBeforeMain ); return 0; } int init2BeforeMain() { printf( "init2BeforeMain (%p)/r/n", init2BeforeMain ); return 0; } int initBreak() { DebugBreak(); return 0; } typedef int (*pInit)(); // for C // put following table between __xi_a and __xi_z #pragma data_seg( ".CRT$XIU" ) pInit start[] = {initBeforeMain, init2BeforeMain, initBreak, }; #pragma data_seg() // for C++ // put following table between __xc_a and __xc_z #pragma data_seg( ".CRT$XCU" ) pInit start2[] = {initBeforeMain, init2BeforeMain, initBreak, }; #pragma data_seg() // for C // put following pointer between __xi_a and __xi_z but after start #pragma data_seg( ".CRT$XIU" ) pInit start3 = initBreak; #pragma data_seg() int main( int argc, char* argv[] ) {}在调试器里执行一下,看看效果如何,有没有给你surprise。
..... (全文见上方链接)