我需要使用宏检查数组是否为空。如果数组的大小是恒定的,比如 2,那么我将能够编写一个类似的宏
#define IS_EMPTY(arr) \
((arr[0] | arr[1]) == 0)
但是如果 arr 是这样定义的
#define ARRAY_SIZE 100
int arr[ARRAY_SIZE];
有什么办法,一个宏可以确定数组是空的吗?或者内联函数是唯一的选择。
您最可行的选择是循环:
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;
}
如果看到数组的定义。即 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);