【问题标题】:C self assignment in functionsC 函数中的自赋值
【发布时间】: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:我对这个问题非常熟悉,在这种情况下,您应该使用宏来明确其意图,如下所述。

标签: c gcc legacy qnx


【解决方案1】:

这将删除有关未引用变量的编译警告/错误。通常这样的事情要么由#pragmas 完成,要么通过更具表现力的形式完成,例如宏:#define unused_var(x) (x)=(x)

【讨论】:

  • GCC 也支持__attribute__((__unused__))。有关更多信息,请参阅gcc.gnu.org/onlinedocs/gcc-3.1/gcc/Variable-Attributes.html。 (一个
  • 我更喜欢这个宏:Qt 使用的#define unused_var(x) (void)(x);
  • 我敢打赌有几十种方法可以做到这一点,但很好的建议:)
  • 在 Parrot 项目中,我让它同时使用,具体取决于编译器。 UNUSED(x) 宏如果支持则使用 __attribute__((__unused__)),如果不支持则使用 (void(x)
猜你喜欢
  • 2013-04-19
  • 2013-09-19
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多