gpt4 book ai didi

g++ - 强制 g++ 为未使用的函数生成代码

转载 作者:行者123 更新时间:2023-12-05 07:58:37 29 4
gpt4 key购买 nike

默认情况下,g++ 似乎会省略未使用的类内定义方法的代码。示例 from my previous question :

struct Foo {
void bar() {}
void baz() {}
};

int main() {
Foo foo;
foo.bar();
}

使用 g++ -g -O0 - c main.cpp 编译时,生成的目标文件仅包含对 bar 的引用而不是 baz .添加--no-deafault-inline对计算机标志也无济于事。关于如何强制 g++ 为 baz 生成代码的任何想法还有吗?

理由

测试覆盖率工具 gcov如果未使用的方法在最终可执行文件中被省略,则将它们报告为不可执行。但是,为了获得有意义的报告,我希望将它们报告为可执行但未执行。为此,我需要找到一种无需更改原始源代码即可实现的方法。

最佳答案

一种可移植的方法是向这些例程添加一些“引用”(在通常意义上,不仅仅是 C++ 中的引用)。

这可以像

这样简单
 typedef void (Foo::*funptr_t) (void);
extern "C" const funptr_t tabfun[] = { &Foo::bar, &Foo::baz };

(我将数组 tabfun 声明为 extern "C" 以确保发出数组,即使未使用也是如此)

您可以尝试 GCC 的 -fno-inline 参数。您还可以自定义 GCC(例如使用 MELT )以自动添加这样的数组(无需触及源代码),但这需要一些工作。

关于g++ - 强制 g++ 为未使用的函数生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com