【发布时间】:2021-02-27 09:38:28
【问题描述】:
如果我们写:
void foo() {
#warning "Danger Will Robinson!"
}
我们会在编译 foo() 时收到警告。现在,我想要做的是编译不发出警告,但如果foo() 被调用,则发出警告。
这可能吗,使用 g++ 和/或 clang++?
注意:这个问题有点类似于this one,关于将函数标记为“已弃用”(a-la C++14 的[[deprecated]] 属性)。但是,这是一个不同的语义。我不希望人们知道我的函数已被弃用,而是得到一个自定义警告。
【问题讨论】:
-
恐怕这不可能。在这种情况下,我宁愿选择
deprecatedattribute。 -
编译器如何判断函数是否被调用?考虑
if (run_time_function() > 40173) foo();。 -
@DavidSchwartz 应该像处理已弃用的属性一样处理它。
-
@einpoklum 像this 这样的东西怎么样?有点hacky,但可以完成工作
-
如果 GNU 在桌面上,那么就有
__attribute__ ((warning ("message")))- 虽然我不确定这正是你所追求的。如果调用在已消除的分支上,死代码消除可以消除警告。
标签: c++ g++ compiler-warnings clang++