我对C有点陌生,所以我不熟悉如何解决该问题。在您继续阅读时,您会发现找到解决方案并不重要,但是对于该应用程序和将来的参考来说肯定会很好。 :)

我有一个参数int hello,但我不想对其进行同步复制。

f(int hello, structType* otherParam){
  // I would like to have a synonom for (!hello)
}


我的第一个想法是创建一个局部常量,但是我不确定是否会增加内存消耗。我正在使用GCC进行构建,但我真的不知道它是否会将参数的常量(在进行任何修改之前)识别为同义变量。我不这样认为,因为该参数以后可能会(即使不会被更改)在该函数中更改,这不会影响常量。

然后,我考虑过制作一个本地的typedef,但是我不确定这样做的语法。我尝试了以下操作:

typedef (!hello) hi;


但是我得到以下错误。

D:/src-dir/file.c: In function 'f':
D:/src-dir/file.c: 00: error: expected identifier or '(' before '!' token


任何帮助表示赞赏。

最佳答案

通常,在C语言中,您想编写最清楚地表达您意图的代码,并让优化者找出实现此目标的最有效方法。

在您经常重复使用的计算示例中,将结果存储在const限定的变量中是执行此操作的最合适方法-类似于以下内容:

void f(int hello)
{
    const int non_hello = !hello;

    /* code that uses non_hello frequently */
}


或更可能:

void x(structType *otherParam)
{
    char * const d_name = otherParam->b->c->d->name;

    /* code that uses d_name frequently */}
}


请注意,不必为这样的const变量分配任何内存(除非您将其地址与&一起放在某个地方)-优化程序可能只是将其放置在寄存器中(请记住,即使它确实得到了分配的内存,则很可能是堆栈内存)。

关于c - 非精确类型的局部同义变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6271065/

10-10 21:26
查看更多