vorrei inizializzare un array di struct, con lo stesso elemento ripetutamente, cioèinitializng una matrice C con i dati ripetitivi
struct st ar[] = { {1,2}, {1,2}, {1,2} };
Comunque io non voglio correre alcun codice per questo, mi auguro che il il layout della memoria al momento dell'esecuzione del programma sarebbe come tale, senza le istruzioni della CPU coinvolte (aumenterebbe il tempo di avvio su CPU molto lente e array relativamente grandi).
Questo ha senso, quando si utilizza la matrice come mini banca dati ad hoc (mappe id a struct) e quando si desidera utilizzare un valore di default a tutti i valori di database.
La mia soluzione migliore era quella di usare qualcosa di forma
#define I {1,2}
struct st ar[SIZE_OF_ARRAY] = { I,I,I };
modo che il compilatore mi avvisa se sto avendo troppo o troppo poco I
s. Ma questo è lontano dall'ideale.
Penso che ci sia alcuna soluzione per questo in ANSI-C, ma ho pensato che forse c'è un macro-abusi, o estensione gcc che avrebbe fatto il lavoro. Idealmente mi piacerebbe una soluzione standard, ma basterebbero anche quelli specifici del compilatore.
Ho pensato che in qualche modo sarei stato in grado di definire una macro in modo ricorsivo in modo che I(27)
sarebbe stato risolto in 27 {1,2}
s, ma non credo sia possibile. Ma forse mi sbaglio, c'è qualche trucco per quello?
Forse l'assemblaggio in linea farebbe il trucco? Sarebbe molto facile definire tale layout di memoria con MASM o TASM, ma non sono sicuro che sia possibile incorporare le istruzioni di layout della memoria all'interno del codice C.
C'è qualche trucco linker che attirarlo per inizializzare la memoria secondo i miei ordini?
PS I know Posso generare automaticamente il file C con qualche script. L'uso di script personalizzati non è desiderabile. Se usassi uno script personalizzato, inventerei una macro C REP(count,exp,sep)
e scriverei un preprocessore mini-C per sostituirlo con exp sep exp sep ... exp {exp appears count time}
.
Sì, BPP sembra piuttosto ideale per questa cosa. – Macke
Una buona soluzione standard - grazie. –