你能在c初始化时运行一个函数吗?

Kei*_*las 6 c portability initialization

程序加载时是否有机制或技巧来运行函数?

我想要实现的目标......

void foo(void)
{
}

register_function(foo);
Run Code Online (Sandbox Code Playgroud)

但显然register_function不会运行.

所以C++中的一个技巧是使用初始化来运行函数

就像是

int throwaway = register_function(foo);
Run Code Online (Sandbox Code Playgroud)

但这在C中不起作用.所以我正在寻找一种方法来使用标准C(没有任何平台/编译器特定)

bdo*_*lan 15

如果您正在使用GCC,则可以使用constructor函数属性执行此操作,例如:

#include <stdio.h>

void foo() __attribute__((constructor));

void foo() {
    printf("Hello, world!\n");
}

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

但是,在C语言中没有可移植的方法.

但是,如果您不介意搞乱构建系统,那么您有更多选择.例如,您可以:

#define CONSTRUCTOR_METHOD(methodname) /* null definition */

CONSTRUCTOR_METHOD(foo)
Run Code Online (Sandbox Code Playgroud)

现在编写一个构建脚本来搜索CONSTRUCTOR_METHOD的实例,并将一系列调用粘贴到生成的.c文件中的函数中.在开始时调用生成的函数main().