【发布时间】:2015-07-23 04:14:30
【问题描述】:
我正在尝试从我的程序中删除未使用的代码 - 我现在无法删除该代码,我只想先禁用它。
假设我有以下代码:
if (cond){
doSomething()
}
而cond 始终为假,因此永远不会调用doSomething。
我想做这样的事情:
#define REMOVE_UNUSED_CODE 0
if (cond && REMOVE_UNUSED_CODE){
doSomething()
}
现在对我们(希望对编译器而言)很明显,这段代码没有被使用。
编译器会删除所有这些if 条件还是会离开它并且永远不会进入?
P.S.:我不能为此目的使用 #if 0
【问题讨论】:
-
cond将在运行时进行评估 - 您希望如何在编译时知道它? -
@al-Acme 我猜 OP 是在询问
REMOVE_UNUSED_CODE。 -
我不确定编译器标准,但编译器应该能够识别
REMOVE_UNUSED_CODE并排除死部分,并启用适当的优化。不过不太确定。 -
你不能试试吗?如果您甚至不告诉使用您要询问的编译器(以及哪个优化级别),也没有人可以告诉您“该”编译器会做什么。我非常有信心大多数启用优化的编译器都能够找出
x && false == false- 假设cond可以很容易地确定没有副作用。 -
这显然是针对安全关键系统(如下所述)的事实有点重要,并且应该成为问题 - 通常不允许在相同的情况下优化安全/可靠的代码作为“常规”代码的方式,因为高端编译器优化有时会引入与最初编写的逻辑不同的逻辑(我认为它不会改变对这个特定问题的实际答案 - 这是一个非常基本优化,第一层 - 但一般来说,这是一件非常重要的事情。
标签: c compilation