我对 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/