首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   Earl · 294 天前 · 1547 次点击
    这是一个创建于 294 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 C++里面,某个类的全局对象的构造函数,可以被自动调用。
    C 里面有没有什么办法可以让一个函数被自动调用啊?谢谢
    22 回复  |  直到 2018-12-25 16:35:25 +08:00
        1
    xenme   294 天前
    那只是 C++语言的特性帮你调用了而已。
    C 没有类似的特性。
        2
    catror   294 天前 via Android
    可以了解一下 gcc 的 constructor
        3
    zyp0921   294 天前
    static void __attribute__((constructor(112))) __reg_srv_name_service()
    {

    }
        4
    Earl   294 天前
    @catror

    @zyp0921

    谢谢你们,gcc 下可以这样解决。那 VS 的编译器下,有好办法吗?
        5
    ysc3839   294 天前 via Android
    @Earl 用 C++ 写个对象调用吧?
        6
    Earl   294 天前
    @ysc3839 不能用 C++呃。。。能用 C++就简单了
        7
    ysc3839   294 天前 via Android
    @Earl 说一下你的用途吧,看看有没有替代方案。
        8
    across   294 天前
    你该说清楚在什么情况下触发调用。
    说是自动调用,都是有触发器的啊。
        9
    Earl   294 天前
    @ysc3839
    @across
    类似全局类对象的构造函数,或者上面有朋友提到的__attribute__((constructor)),就是定义在 main 函数外,在程序启动后也能被自动调用
        10
    wevsty   294 天前
    不是很明白为什么要有这样的需求。

    要求在程序在启动的时候执行个函数那直接在 mian 函数里面调用不就行了?干嘛要舍近求远?
        11
    shuax   294 天前
    http://cpp.sh/43i34
    手动调用行不行
        12
    wizardoz   294 天前
    写代码的过程不就是创造自动化的过程吗?
        13
    zhujinliang   294 天前 via iPhone
    用宏包装一下?
        14
    ysc3839   294 天前 via Android
    @Earl 问的是为什么要自动调用,要自动调用来实现什么?
        16
    deanzh16   294 天前 via Android
    Try lambda ?
    static int x = [ ]( ) { foo(); return 0; }( );
        17
    deanzh16   294 天前 via Android
    @deanzh16 哦 是 C sorry
        18
    ChrisTsai   294 天前
    @ysc3839 #14 估计是类似于 linux 内核 module_init 的作用。
    据我所知,module_init 就是采用楼上所说的 gcc 的 constructor,至于 VS 下就不太清楚了。。
    要不尝试一下 MinGW 编译?
        19
    Earl   293 天前
    @wevsty
    @shuax
    @wizardoz
    @ysc3839
    例如写一个注册函数接口,需要用户在写具体的业务代码前就注册好。如果可以自动执行,用户在写自己的 main 函数的话,就不用关心这个注册了呀。不然要提醒用户一定要提前注册,万一忘了多麻烦。而且让用户调用,也可能会多次注册之类的。
        20
    Earl   293 天前
    @shuax 这个在 c 下面编不过吧。。。
        21
    wevsty   293 天前
    @Earl
    C 标准没有这样的方法,与其你用奇奇怪怪的技巧来适配各个平台,不如直接文档写明白点。
    很多库要初始化是很常见的做法,文档写好就行了。
        22
    Earl   293 天前
    @wevsty 恩,没有好办法的话,就只能给文档了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3056 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 41ms · UTC 11:03 · PVG 19:03 · LAX 04:03 · JFK 07:03
    ♥ Do have faith in what you're doing.