次の方法で共有


_countof マクロ

静的に割り当てられた配列内の要素の数を計算します。

構文

#define _countof(array) (sizeof(array) / sizeof(array[0]))

パラメーター

array
配列の名前。

戻り値

配列内の要素の数 (size_t で表現)。

解説

_countof は、関数に似たプリプロセッサ マクロとして実装されます。 C++ のバージョンには、静的に宣言された配列ではなく、ポインターが渡された場合にコンパイル時に検出する追加のテンプレート機構があります。

array がポインターではなく、実際に配列であることを確認します。 C では、array がポインターである場合、_countof によって間違った結果が生成されます。 C++ では、array がポインターである場合、_countof でコンパイルに失敗します。 関数にパラメーターとして渡された配列は、"ポインターになります"。これは、関数内で _countof を使用して配列の範囲を判断できないことを意味します。

要件

マクロ 必須ヘッダー
_countof <stdlib.h>

// crt_countof.cpp
#define _UNICODE
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>

int main( void )
{
   _TCHAR arr[20], *p;
   printf( "sizeof(arr) = %zu bytes\n", sizeof(arr) );
   printf( "_countof(arr) = %zu elements\n", _countof(arr) );
   // In C++, the following line would generate a compile-time error:
   // printf( "%zu\n", _countof(p) ); // error C2784 (because p is a pointer)

   _tcscpy_s( arr, _countof(arr), _T("a string") );
   // unlike sizeof, _countof works here for both narrow- and wide-character strings
}
sizeof(arr) = 40 bytes
_countof(arr) = 20 elements

関連項目

sizeof 演算子