﻿# Препроцессированный \*\.i файл

Препроцессированный \*\.i файл \-  это результат работы препроцессора языка C или C\+\+\. Как правило, именно такое расширение имеют файлы, получившиеся в результате работы препроцессора\. Препроцессор выполняет первичные преобразования исходного текста программы, используя при этом только [лексический анализ](https://pvs-studio.ru/ru/blog/terms/0025/)\. 

Препроцессор выполняет следующие действия:

* Включение заголовочных файлов \(директива '\#include'\);
* Подстановка макросов \(директива '\#define'\);
* Условная компиляция \(директивы '\#if', '\#ifdef', '\#else', '\#elif', '\#endif'\)\.

Препроцессор может использоваться как вспомогательный инструмент при статическом анализе кода\. Так, например, в статическом анализаторе PVS\-Studio используются сразу три различных препроцессора \(MSVC, Clang, C\+\+Builder\) в зависимости от типа исходного проекта или файла\. Это необходимо потому, что в основе анализатора лежит библиотека разбора кода VivaCore, которая не имеет встроенного препроцессора\. Необходимость в предварительном препроцессировании исходного файла обусловлена тем, что для качественного статического анализа кода необходимо, что бы все директивы '\#include' и '\#define' были раскрыты\.

Получить препроцессированный файл в среде MSVC можно, установив значение свойства 'Generate Preprocessed File' из вкладки 'C/C\+\+\\Preprocessor', как показано на рисунке 1\.

![preprocessed_i_file_ru/image1.png](https://import.viva64.com/docx/blog/preprocessed_i_file_ru/image1.png)

Получить препроцессированый файл, использую компилятор GCC можно, добавив в его вызов параметры '\-E \-o имя\_файла\.i'\.

## Библиографический список

1. Wikipedia\. [Препроцессор Си\.](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80_%D0%A1%D0%B8)
1. [Препроцессирование \(в языке Си/Си\+\+\)](https://pvs-studio.ru/ru/blog/terms/0040/)\.
1. MSDN\. [Preprocess to a File\.](https://www.microsoft.com/en-us/download/details.aspx?id=55984)