我需要使用宏来检查数组是否为空。如果数组的大小是常数,如2,那么我将能够编写一个像
这样的宏#define IS_EMPTY(arr) \
((arr[0] | arr[1]) == 0)
但如果arr被定义为这样
#define ARRAY_SIZE 100
int arr[ARRAY_SIZE];
有什么办法,宏可以确定数组是空的吗?或者内联函数是唯一的选择。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
如果看到数组的定义。即struct foo arr [] = {initialization_list},然后 array_length = sizeof(array)/ sizeof(element_of_array);
围绕它的其他方法可能是指针运算与假设全局变量的分配没有(很多)填充。
extern int a [] = {2,4,5}; extern int b = 1;
size =(&amp; b-&amp; a [0])/ sizeof(int);