Шаг 1 - Преобразование файлов

Процесс создания программы из исходного текста заключается в переводе одного или нескольких файлов в бинарный вид с кодом программы. Этот процесс происходит в несколько этапов.

Лексический анализ. В этот процесс производится подготовка текста к обработке, символьный разбор, срашивание линий. Как известно каждая строка заканчивается знаком ;, а каждый блок начинается { и заканчивается } в эту фазу производится анализ строк на правильность.

Препроцессор. В этом этапе обрабатываются директивы препроцессора такие, например, как #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)

И только исправив эту ошибку произойдет разбор теста и поиск следующей. То есть команды препроцессора проверяются первыми и пока они не проверены производится остановка и дальше процесс компиляции не идет.


Следующий Шаг | Оглавление
Автор Каев Артем - 18.04.2000