Inicializar matriz con elemento extra usando una macro

8

Estoy inicializando una matriz de dos maneras diferentes dependiendo de una macro:

# if feature_enabled
const int v[4] = {1, 2, 3, 4};
#else
const int v[5] = {0, 1, 2, 3, 4};
#endif

El problema es que los datos en la asignación son en realidad matrices grandes, y por varias razones no es una buena solución simplemente copiar los datos con una modificación menor (solo un elemento más al comienzo de la matriz).

Me preguntaba si hay una manera de hacer lo mismo que hice aquí, sin duplicar esencialmente los últimos elementos n-1.

CE
fuente
66
¿Sabe que el tamaño de la matriz no coincide con el número de elementos en la lista de inicializadores?
mch
@mch lo arregló ahora, era algo que escribí para la pregunta.
CE
@CE "y por varias razones no es una buena solución simplemente copiar los datos con una modificación menor" - ¿Podría darnos una referencia para eso? ¿De qué se preocupa?
RobertS apoya a Monica Cellio el
@ RobertS-ReinstateMonica ¿Por qué, en general, es malo duplicar el código? Ese es un tema bastante amplio. Afortunadamente, obtuve mi respuesta de todos modos.
CE
@CE No necesita hacer una explicación demasiado detallada, estaría bien si pudiera dar una referencia al menos a lo que está señalando y cuál es la base de esa pregunta. Entonces, las personas que no están confirmadas con estas cosas pueden entender el propósito de esa pregunta.
RobertS apoya a Monica Cellio el

Respuestas:

16

Si no especifica el tamaño en la matriz pero deja que se deduzca automáticamente, simplemente puede agregar el 0 en el frente condicionalmente:

const int v[] = {
# if feature_enabled
  0,
#endif
  1, 2, 3, 4
};
Pelea de tortugas
fuente
3

Si necesita mantener el tamaño de la matriz, entonces:

# if feature_enabled
const int v[4] = {
#else
const int v[5] = {0,
#endif
  1, 2, 3, 4
};
mik
fuente