-3

我需要使用宏检查数组是否为空。如果数组的大小是恒定的,比如 2,那么我将能够编写一个类似的宏

#define IS_EMPTY(arr)  \
  ((arr[0] | arr[1]) == 0) 

但是如果 arr 是这样定义的

#define ARRAY_SIZE 100
int arr[ARRAY_SIZE];

有什么办法,一个宏可以确定数组是空的吗?或者内联函数是唯一的选择。

4

2 回答 2

1

您最可行的选择是循环:

int IsEmpty(char * array, size) {
 int i;
 for (i=0; i<size; i++)
   if (array[i] != 0)
      return 0;
 return 1;
}

或 memcmp:

int IsEmpty(char * array, size) {
 char * emptyArray = malloc(size);
 memset(emptyArray, 0, size);
 int res = memcmp(array, emptyArray, size);
 free(emptyArray);
return res==0;
}
于 2012-11-13T18:20:06.393 回答
0

如果看到数组的定义。即 struct foo arr[]={initialization_list},然后 array_length = sizeof(array) / sizeof(element_of_array);

解决它的其他方法可能是指针算法,假设全局变量是在没有(很多)填充的情况下分配的。

外部 int a[]={2,4,5}; 外部int b = 1;

大小 = (&b-&a[0])/sizeof(int);

于 2012-11-13T18:16:03.313 回答