rangos - que es declaracion de variables
¿Concatenación de nombres de variables en C? (5)
Cuando se encuentre agregando un sufijo entero a los nombres de las variables, creo que debería haber usado una matriz .
struct mystruct {
int class[6];
};
int main(void) {
struct mystruct s;
int i;
for (i = 0; i < 6; ++i) {
s.class[i] = 1000 + i;
}
return 0;
}
Nota: Un compilador de C ++ incurrirá en esto debido a la class
. Tendrá que encontrar un nombre diferente para ese campo si planea compilar este código como C ++.
¿Es posible concatenar nombres de variables en C? Específicamente, tengo una struct
que contiene 6 variables similares llamadas class2
, class3
, class3
, etc.
Quiero ejecutar un bucle for para asignar un valor a cada variable, pero no puedo ver cómo hacerlo sin que de algún modo se concatene el nombre de la variable con el valor del contador de bucle for.
¿De qué otra manera podría hacer esto?
El preprocesador C puede concatenar símbolos, pero ¿ha considerado utilizar una matriz?
Hay idiomas dinámicos en los que puede hacer este tipo de cosas: C no es uno de estos idiomas. Estoy de acuerdo con Sinan: las matrices o los vectores STL son el camino a seguir.
Como un experimento mental, ¿qué pasaría si tienes 100,000 de estas variables? ¿Tendría 100,000 líneas de código para inicializarlas?
Lo que también podrías hacer es escribir una implementación de un mapa hash. Dado que el conjunto de claves (que serían como nombres de variables) del mapa hash no cambia con el tiempo, para cada mapa hash podría mantener una matriz de sus claves para iterar de manera eficiente. Pero eso sería una exageración total (loca), especialmente en C;)
Casi todo es posible en C, es un gran lenguaje para aprender :)
tal vez la regla de codificación segura CERT-C PRE05-C ''Comprenda la sustitución de macro al concatenar tokens o realizar stringification'' podría ayudarlo. Para obtener más detalles, consulte este enlace: https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification .
Para abreviar, defina primero una macro JOIN_AGAIN (x, y) (x ## y) y luego JOIN (x, y) JOIN_AGAIN (x, y) La macro JOIN_AGAIN permite expandir el valor del contador de bucles que se concatenará al var nombre.
Saludos Pierre Bui