在main()前/后调用函数

分别通过使用GCC的扩展和C++的constructor这两种守法在main()的前面/后面调用函数的方法。

在main()前面调用函数

可用__attribute__((constructor))扩展功能在GCC中定义在main()前被呼叫的函数。

#include <stdio.h>
__attribute__((constructor))
void foo() {
    printf("hello, before main\n");
}
int main() {
    printf("hello, world\n");
    return 0;
}

运行结果如下:

$ ./a.out
hello, before main
hello, world

上面的__attribute__((constructor))是GCC的扩展功能所以没有移植性。然而,在C++中通过使用class的constructor却能用可移植方法进行同样的操作。

#include <stdio.h>
void foo() {
    printf("hello, before main\n");
}
namespace { struct foo_caller { foo_caller() { foo(); }} caller; }
int main() {
    printf("hello, world\n");
    return 0;
}

在main()后面调用函数

相对的:

#include <stdio.h>
void foo() {
    printf("hello, before main\n");
}
namespace { struct foo_caller { ~foo_caller() { foo(); }} caller; }
int main() {
    printf("hello, world\n");
    return 0;
}