调用没有入口点的代码

时间:2014-07-22 17:30:19

标签: c++11 lambda static-initialization

在C ++中,我希望能够模拟"插件"没有动态库加载。我找到了一种方法来将静态库中的函数连接到我的可执行文件而不引用它,但我不确定这是正确的。

因为全局符号在翻译单元主函数之前被初始化,所以我可以写一些类似的东西:

int _ = []()
{
    std::cout << "hook" << std::endl;
    return 0;
} ();

lambda + IIFE模式+ safe initialisation的组合有效,但由于我从未遇到过这种技术,我担心未定义的行为或编译器特定的细节。还有什么更好的吗?

1 个答案:

答案 0 :(得分:0)

您展示的是合法的C ++。通常,全局变量的初始化可用于在main()之外运行代码。有一些警告,即&#34; static initialization order fiasco&#34; - 如您提供的链接中所述。

你还没有看到它,因为它不赞成。您正在使用全局变量来运行main()之外的代码。许多这样的尝试都以沮丧的方式结束了。