Teniendo en cuenta el VLA (matriz de longitud variable) Me gustaría pedir a sus comentarios sobre el siguiente problema: Si un conjunto se define en el ámbito mundial en un solo archivo:¿Cómo declarar una matriz global de tamaño definida en otro archivo en C99?
int arr[] = {1, 2, 3};
// in the same file it is no problem to obtain the number of elements in arr by
#define arr_num sizeof(arr)/sizeof(arr[0])
// or
enum {arr_num = sizeof(arr)/sizeof(arr[0])};
El problema es que en otros archivos en el mismo proyecto, me gustaría crear otras matrices de nuevo en ámbito global con la misma cantidad de elementos que existen en arr. Pero, ¿cómo se puede lograr esto en C99 si no hay forma de "externar" la enumeración o el #define? Por supuesto, uno puede # definir el número de elementos de arr a mano en un archivo de cabecera y luego usarlo en los otros archivos, pero esto es muy inconveniente ya que al cambiar el número de elementos en la matriz arr uno también tiene que cambiar a mano el valor de este #define (esto es aún más inconveniente cuando arr es una matriz de estructuras).
Muchas gracias por cualquier ayuda.
Todavía no es válido C incluso con la optimización de todo el programa. –