Domanda

E 'possibile concatenare i nomi delle variabili in C? In particolare, ho un struct che contiene 6 variabili simili in esso chiamato class1, class2, class3, ecc.

Voglio correre attraverso un ciclo for per assegnare ogni variabile un valore, ma non riesco a vedere come farlo senza in qualche modo concatenando il nome della variabile con il valore del per contatore del ciclo.

Come altro avrei potuto fare questo?

È stato utile?

Soluzione

Quando ti trovi l'aggiunta di un suffisso intero a nomi di variabili, pensare avrei dovuto usare una matrice .

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 compilatore C ++ saranno barf a questo a causa della class. Sarà necessario capire un nome diverso per il campo, se si prevede di compilare questo codice come C ++.

Altri suggerimenti

Non ci sono linguaggi dinamici dove si può fare questo genere di cose - C non è una di queste lingue. Sono d'accordo con Sinan - matrici o vettori STL sono la strada da percorrere

.

Come un esperimento mentale - che cosa accadrebbe se si dispone di 100.000 di queste variabili? Avreste 100.000 righe di codice per inizializzare loro?

Il preprocessore C può concatenate simboli, ma hai considerato solo usando un array?

Che cosa si potrebbe anche fare, è scrivere un'implementazione di una mappa di hash. Dal momento che il set di chiavi (che sarebbe come nomi delle variabili) della mappa di hash non cambia nel corso del tempo, per ogni mappa di hash si potrebbe tenere una serie di sue chiavi per iterare in modo efficiente. Ma sarebbe un totale (folle) eccessivo, soprattutto in C;)

Praticamente tutto è possibile in C, è una grande lingua da imparare:)

forse il CERT-C garantire codifica regola PRE05-C 'Capire la sostituzione macro quando concatenazione gettoni o l'esecuzione in stringa' potrebbe aiutare. Per i dettagli profondi dare un'occhiata a questo link: https://www.securecoding.cert.org/confluence/display/seccode/PRE05-C.+Understand+macro+replacement+when+concatenating+tokens+or+performing+stringification .

Per breve, definiscono un primo JOIN_AGAIN macro (x, y) (x ## y) e poi unire (x, y) JOIN_AGAIN (x, y) La macro JOIN_AGAIN permette di ampliare il valore della couner ciclo che verrà concatenato al nome var.

Saluti Pierre Bui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top