【发布时间】:2012-12-18 16:45:45
【问题描述】:
将一些遗留 C 代码从 QNX(Photon C 编译器)移植到 Linux (GCC)。在几个地方我看到这样的代码:
void process_data(char key, char *data)
{
int i;
/* Required for compilation */
i=i;
key=key;
data=data;
...
}
显然,编译不需要此代码,它什么也不做。
我的问题是你为什么会首先这样做?
【问题讨论】:
-
关闭警告使用未初始化变量的编译器,也许。但那是彻头彻尾的邪恶。
-
也许他们在构建时为未使用的变量/参数启用了警告,并且警告被视为错误。
-
编写这样的代码来关闭警告就像用一块电工胶带盖住“检查引擎”灯。警告是有原因的。我会删除该代码,编译它,然后看看会发生什么。告诉我们好吗?
-
@AndyLester 这就是为什么通常这段代码不会自动注入而是在检查后手动放置的原因。在某些情况下您不需要该变量,例如如果您有一个用于各种操作的通用处理程序,并且对于某些操作,则不需要该参数
-
@icepack:我对这个问题非常熟悉,在这种情况下,您应该使用宏来明确其意图,如下所述。