Другие языки программирования и технологии
Книги по директивам препроцессора в Си
Подскажите книги, в которых подробно описывается работу с директивами препроцессора (типа #define,#pragma,#def,#ifelse и т. д.) ? С примерами
Документация компилятора. Вот, например, для GCC:
The C Preprocessor
The C Preprocessor
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__
Заменяется на время начала компиляции
Вот и все.
#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__
Заменяется на время начала компиляции
Вот и все.
Похожие вопросы
- Посоветуйте книги по программированию на Си.
- какая книга лучшая для изучения си или си++ ?с нуля. ну для новичков.
- Язык Си. Читаю K&R (книга автора языка с примерами). Упражнение 1.10
- Объясните простыми словами: что делает препроцессор? (c++)
- Что именно принято считать препроцессором в програмировании?
- Разница между Си и Си++
- Как из си++ сделать си?)... подробнее
- Какие преимущества сохранил Ассемблер к Си?
- Си или Си шарп (С#)???
- помоги с СИ++..