Процесс создания программы из исходного текста заключается в переводе одного или нескольких файлов в бинарный вид с кодом программы. Этот процесс происходит в несколько этапов.
Лексический анализ. В этот процесс производится подготовка текста к обработке, символьный разбор, срашивание линий. Как известно каждая строка заканчивается знаком ;, а каждый блок начинается { и заканчивается } в эту фазу производится анализ строк на правильность.
Препроцессор. В этом этапе обрабатываются директивы препроцессора такие, например, как #include или #define, а так же обрабатываются макро определения. Директивы препроцессора всегда начинаются со знака #.
Генерация кода. D эту фазу производится создание объектного кода на основе написанных строк и выражений.
Препроцессор C++ является расширением препроцессора C, но имеет несколько расширений.
Вот примерно так для кода. Этот код будет для начала собран в строки.
// 2.cpp : Defines the entry point for the console application. // #include "stdafx.h" #define asb 100 int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; }
Примерно вот так:
#include"stdafx.h" #define asb 100 int main(int argc,char* argv[]) { printf("Hello World!\n"); return 0; }
Собраны строки, удалены все ненужные пробелы, коментарии если есть. Дальше будет обработаны команды препроцессора, а потом сам код. Измените код как ниже, чтобы посмотреть какую ошибку компилятор найдет первой. Вот я сделаю ошибку в #define и компилятор найдет её и остановится не обратив внимания на ошибку в типе переменной в main(), двинуться дальше можно было только исправив ошибку в препроцессоре.
#include"stdafx.h" #defin asb 100 int main(intxx argc,char* argv[]) { printf("Hello World!\n"); return 0; }
Вот так скажет компилятор:
--------------------Configuration: 2 - Win32 Debug-------------------- Compiling... 2.cpp D:\Project\2\2.cpp(5) : fatal error C1021: invalid preprocessor command 'defin' Error executing cl.exe. 2.exe - 1 error(s), 0 warning(s)
И только исправив эту ошибку произойдет разбор теста и поиск следующей. То есть команды препроцессора проверяются первыми и пока они не проверены производится остановка и дальше процесс компиляции не идет.