用于检查数组的MACRO在c中是空的

时间:2012-11-13 17:59:56

标签: c macros

我需要使用宏来检查数组是否为空。如果数组的大小是常数,如2,那么我将能够编写一个像

这样的宏
#define IS_EMPTY(arr)  \
  ((arr[0] | arr[1]) == 0) 

但如果arr被定义为这样

#define ARRAY_SIZE 100
int arr[ARRAY_SIZE];

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

2 个答案:

答案 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);