Fasi di conversione
I programmi C++ e c# sono costituite da una o più file di origine, ciascuno contenente parte del testo del programma.Un file di origine, insieme ai relativi file di inclusione (file che vengono importati mediante #include direttiva per il preprocessore) ma senza includere le sezioni di codice rimosse le direttive di compilazione condizionale come #if, viene chiamato “unità di conversione„.
I file di origine possono essere convertiti in momenti diversi - infatti, viene in genere utilizzata da convertire solo i file non aggiornati.Le unità di conversione tradotte possono essere elaborate nei file oggetto o raccolte separate di codice dell'oggetto.Le unità di conversione separate e convertite quindi vengono collegate per formare un programma eseguibile o una libreria a collegamento (DLL) dinamico.Per ulteriori informazioni sui file che possono essere utilizzati come input del linker, vedere File di input LINK.
Le unità di conversione possono comunicare tramite:
Chiamate alle funzioni che hanno collegamento esterno.
Chiamate alle funzioni membro di classe con collegamento esterno.
Eseguire la modifica degli oggetti che dispongono di un collegamento esterno.
Modificare direttamente i file.
Comunicazione interprocesso (per Microsoft applicazione basata su Windows solo).
Nell'elenco seguente vengono descritti i passaggi in cui il compilatore traduce i file:
Indicizzazione il carattere
I caratteri nel file di origine vengono mappati alla rappresentazione di origine interna.Le sequenze di trigramma vengono convertite nella rappresentazione interna a un solo carattere in questa fase.Splicing di riga
Tutte le righe che terminano in una barra rovesciata (\) e immediatamente seguita da un carattere di nuova riga sono uniti alla riga successiva nel file di origine che forma le righe logiche delle righe fisiche.A meno che non sia vuota, un file di origine deve terminare con un carattere di nuova riga che non è preceduto da una barra rovesciata.Suddivisione in token
Il file di origine è suddiviso in token negli spazi vuoti di pre-elaborazione.Commenti nel file di origine vengono sostituite con uno spazio ciascuno.I caratteri di nuova riga vengono mantenuti.La pre-elaborazione
Le direttive di pre-elaborazione vengono eseguite e le macro vengono espanse nel file di origine.#include l'istruzione richiama la conversione che inizia con i tre passaggi precedenti di conversione su tutto il testo incluso.Mapping dei set di caratteri
Tutti dei membri del set di caratteri e sequenze di escape vengono convertite nei relativi equivalenti nel set di caratteri di esecuzione.Per Microsoft C e C++, sia l'origine che i set di caratteri di esecuzione sono ASCII.Concatenazione di stringhe
Tutti i valori letterali adiacente di ampio-stringa e delle stringhe vengono concatenati."String " "concatenation" ad esempio diventa "String concatenation".Conversione
Tutti i token vengono analizzati sintassi e semanticamente; questi token vengono convertiti nel codice dell'oggetto.Collegamento
Tutti i riferimenti esterni vengono risolti per creare un programma eseguibile o una libreria a collegamento dinamico.
Il compilatore genera avvisi o errori durante le fasi di conversione in cui rileva gli errori di sintassi.
Il linker risolve tutti i riferimenti esterni e crea un programma eseguibile o una DLL combinando uno o più unità di conversione separatamente elaborate con le librerie standard.