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()
.
归档时间: |
|
查看次数: |
3391 次 |
最近记录: |