Другие языки программирования и технологии

Книги по директивам препроцессора в Си

Подскажите книги, в которых подробно описывается работу с директивами препроцессора (типа #define,#pragma,#def,#ifelse и т. д.) ? С примерами
Документация компилятора. Вот, например, для GCC:
The C Preprocessor
Андрей Федоров
Андрей Федоров
24 295
Лучший ответ
Kirill Tabakov Можно документацию на русском языке ?
Документация по Windows: https://msdn.microsoft.com/ru-ru/library/y4skk93w
Для подобного книга не нужна. Могу пояснить на пальцах

#define [Название] [Опционально: значение]
Натыкаясь на эту директиву, препроцессор запомнит это значение и, наткнувшись в дальнейшем на название в коде, заменит его на значение.
Так же поддерживается функциональный стиль типа
#define F(x, y, x) x+y+sin(z)+1
Что будет означать, что все "F(x)" после определения макроса будут заменены на "x+y+sin(z)+1"

#undef [Название]
Если макрос с таким названием был создан до этого момента, то он будет уничтожен и после этой директивы не будет ни на что заменяться

#if [логическое выражение с примением макроса]
Аналог if(условие) {. Код между #if и #endif/#else/#elif удаляется, если выражение не верное

#ifdef [Название макроса]
Если макрос был не был определен с помощью #define, то код между #ifdef и #endif/#else/#elif удаляется

#ifndef [Название макроса]
Если макрос был был определен с помощью #define, то код между #ifdef и #endif/#else/#elif удаляется

#else
Аналог }else{

#elif [Условие]
Аналог }else if(условие) {. Код между #if и #endif/#else/#elif удаляется, если условие не верное.

#endif
Аналог } (Конец ветвления)

#line [Номер строки] "[Опционально: название файла]"
При возникновении ошибки на следующей после этой директивы строке, компилятор укажет, что ошибка была на строке, указанной в директиве, и в указанном файле, если он вообще указан.

#error "[Текст ошибки]"
Натыкаясь на эту директиву, компилятор обрывает компиляцию и выдает текст ошибки

#include <[Название файла] >
#include "[Название файла]"
Копирует содержимое файла на место директивы. В двойных кавычках - относительный путь, в угловых - include_path

#pragma [Команда]
Разнится от компилятора к компилятору.

Так же стоит упомянуть особые макросы, уже определенные без тебя
__LINE__
Заменяется на номер строки

__FILE__
Заменяется на название компилируемого файла

__DATE__
Заменяется на дату компиляции

__TIME__
Заменяется на время начала компиляции

Вот и все.