gpt4 book ai didi

c - 如何从C中的单个结构中区分数组变量和普通变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:16 26 4
gpt4 key购买 nike

我正在尝试将变量名传递给 C 代码中的宏。并需要识别它是否是一个数组或不是运行时。可以用 C 实现吗?

最佳答案

通常不可能,但在某些情况下您可以让它工作:

如果数组是静态分配的:

例如 int arr[N];int arr[] = {1,2,3};:

#define IS_ARRAY(x)  ((void*)(x) == (void*)&(x))

这是有效的,因为如果数组如上声明,arr&arr&arr[0] 相同。那是因为虽然数组确实充当指针,但实际上没有为该指针分配内存,因此您无法获取它的地址。 & 运算符返回第一个元素的地址。

如果你的数组实际上是一个指针,这将不起作用,例如 int *arr = malloc(3*sizeof(int));

如果你的变量总是原始类型

对类型泛型表达式使用 C11 特性,您可以:

#define IS_ARRAY(x) _Generic((x), default:1,char:0,short:0,int:0,long:0,float:0,double:0,long double:0)

这将只为那些类型的 x 返回 0,为任何其他类型(包括数组)返回 1。

如果你的数组比变量大

为了完整起见,我列出了这个:

#define IS_ARRAY(x)  (sizeof(x) > SOME_VALUE)

如果你的数组被分配得比所有非数组变量都大,这将是正确的。不过,您最好在所有情况下都使用第一种方法。

关于c - 如何从C中的单个结构中区分数组变量和普通变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592644/

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