gpt4 book ai didi

c - 是否可以在 gcc 纯 C 中取消 const typeof?

转载 作者:太空狗 更新时间:2023-10-29 16:38:17 25 4
gpt4 key购买 nike

我有一个宏,它使用 GCC 的 typeof 创建一个与宏参数类型相同的变量。问题是:如果该参数具有 const 类型,则在宏中创建的变量是 const 并且我无法使用它。例如:

#include <stdio.h>

#define DECR(x) ({typeof(x) y; y = x; y--; y;})

int main(void)
{
const int v = 5;
printf("%d\n", DECR(v));
return 0;
}

编译给出:

$ cc    -c -o t.o t.c
t.c: In function 'main':
t.c:9:2: error: assignment of read-only variable 'y'
t.c:9:2: error: decrement of read-only variable 'y'
make: *** [t.o] Error 1

有没有一种方法可以复制值的类型并将其取消常量?

最佳答案

如果您不介意可能的算术提升,您可以这样做:

#define DECR(x) ({typeof(x + 0) y; y = x; y--; y;})

诀窍在于 typeof 的表达式是 x + 0,它是一个右值,所以左值常量(这就是你想避免)丢失。

同样的技巧可以用 1 * x 完成,但奇怪的是,+x-x 不起作用。

关于c - 是否可以在 gcc 纯 C 中取消 const typeof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com