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

それを回避する他の方法は、グローバル変数が(多くの)パディングなしで割り当てられることを前提としたポインター演算である可能性があります。

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

サイズ = (&b-&a[0])/sizeof(int);

于 2012-11-13T18:16:03.313 に答える