Macro _countof
Calcula el número de elementos de una matriz asignada estáticamente.
Sintaxis
#define _countof(array) (sizeof(array) / sizeof(array[0]))
Parámetros
array
Nombre de una matriz.
Valor devuelto
Número de elementos de la matriz, expresados como un size_t
.
Comentarios
_countof
se implementa como una macro de preprocesador similar a una función. La versión de C++ tiene maquinaria de plantilla adicional para detectar en tiempo de compilación si se pasa un puntero en lugar de una matriz declarada estáticamente.
Asegúrese de que array
es realmente una matriz, no un puntero. En C, _countof
producirá resultados erróneos si array
es un puntero. En C++, _countof
no se compilará si array
es un puntero. Una matriz pasada como parámetro a una función se degrada a un puntero, lo que significa que dentro de la función, no se puede usar _countof
para determinar la extensión de la matriz.
Requisitos
Macro | Encabezado necesario |
---|---|
_countof |
<stdlib.h> |
Ejemplo
// 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