c - 局部同义变量到非精确类型

标签 c function gcc constants typedef

我对 C 有点陌生,所以我不熟悉如何解决这个问题。当您继续阅读时,您会注意到找到解决方案并不重要,但它对于此应用程序和 future 的引用肯定会有好处。 :)

我有一个参数 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/

相关文章:

c++ - gcc -MDD with -isystem<include_path> 不会为 "system"路径添加依赖项

c - 修改ELF文件

c - 将 "pointer to structure"传递给函数是否会在 C 中创建它的本地副本?

javascript - 构造函数没有保存 querySelector(x).value

c - 在 C 中减去无符号整数并得到 -Wconversion 警告

c++ - 优化标志导致计算不正确

c - C 中的数组错误

c - C 中的 String 到 Struct 变量,不带指针,define

C#变量=新函数(){};

javascript - 在外部 JavaScript 表中使用多个函数