求问 C 函数怎么被自动调用

2018-12-24 14:52:47 +08:00
 Earl
在 C++里面,某个类的全局对象的构造函数,可以被自动调用。
C 里面有没有什么办法可以让一个函数被自动调用啊?谢谢
2702 次点击
所在节点    程序员
22 条回复
xenme
2018-12-24 14:54:42 +08:00
那只是 C++语言的特性帮你调用了而已。
C 没有类似的特性。
catror
2018-12-24 15:01:03 +08:00
可以了解一下 gcc 的 constructor
zyp0921
2018-12-24 15:05:30 +08:00
static void __attribute__((constructor(112))) __reg_srv_name_service()
{

}
Earl
2018-12-24 15:08:31 +08:00
@catror

@zyp0921

谢谢你们,gcc 下可以这样解决。那 VS 的编译器下,有好办法吗?
ysc3839
2018-12-24 15:20:48 +08:00
@Earl 用 C++ 写个对象调用吧?
Earl
2018-12-24 15:35:01 +08:00
@ysc3839 不能用 C++呃。。。能用 C++就简单了
ysc3839
2018-12-24 15:37:20 +08:00
@Earl 说一下你的用途吧,看看有没有替代方案。
across
2018-12-24 15:41:58 +08:00
你该说清楚在什么情况下触发调用。
说是自动调用,都是有触发器的啊。
Earl
2018-12-24 16:52:06 +08:00
@ysc3839
@across
类似全局类对象的构造函数,或者上面有朋友提到的__attribute__((constructor)),就是定义在 main 函数外,在程序启动后也能被自动调用
wevsty
2018-12-24 17:01:24 +08:00
不是很明白为什么要有这样的需求。

要求在程序在启动的时候执行个函数那直接在 mian 函数里面调用不就行了?干嘛要舍近求远?
shuax
2018-12-24 17:15:33 +08:00
http://cpp.sh/43i34
手动调用行不行
wizardoz
2018-12-24 17:18:30 +08:00
写代码的过程不就是创造自动化的过程吗?
zhujinliang
2018-12-24 17:21:01 +08:00
用宏包装一下?
ysc3839
2018-12-24 17:21:38 +08:00
@Earl 问的是为什么要自动调用,要自动调用来实现什么?
shuax
2018-12-24 17:34:58 +08:00
deanzh16
2018-12-24 17:41:47 +08:00
Try lambda ?
static int x = [ ]( ) { foo(); return 0; }( );
deanzh16
2018-12-24 17:43:02 +08:00
@deanzh16 哦 是 C sorry
ChrisTsai
2018-12-24 17:47:56 +08:00
@ysc3839 #14 估计是类似于 linux 内核 module_init 的作用。
据我所知,module_init 就是采用楼上所说的 gcc 的 constructor,至于 VS 下就不太清楚了。。
要不尝试一下 MinGW 编译?
Earl
2018-12-25 14:50:01 +08:00
@wevsty
@shuax
@wizardoz
@ysc3839
例如写一个注册函数接口,需要用户在写具体的业务代码前就注册好。如果可以自动执行,用户在写自己的 main 函数的话,就不用关心这个注册了呀。不然要提醒用户一定要提前注册,万一忘了多麻烦。而且让用户调用,也可能会多次注册之类的。
Earl
2018-12-25 14:51:49 +08:00
@shuax 这个在 c 下面编不过吧。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520476

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX