мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
asm:c_cpp [26/02/2014 21:11] – создано arabusovasm:c_cpp [26/02/2014 21:31] (текущий) arabusov
Строка 1: Строка 1:
-==== Препроцессор ====+===== Препроцессор =====
 Директивы препроцессора: Директивы препроцессора:
-  define — задаёт макроопределение (макрос) или символическую константу +  define — задаёт макроопределение (макрос) или символическую константу 
-  undef — отменяет предыдущее определение +  undef — отменяет предыдущее определение 
-  include — вставляет текст из указанного файла +  include — вставляет текст из указанного файла 
-  if — осуществляет условную компиляцию при истинности константного выражения +  if — осуществляет условную компиляцию при истинности константного выражения 
-  ifdef — осуществляет условную компиляцию при определённости символической константы +  ifdef — осуществляет условную компиляцию при определённости символической константы 
-  ifndef — осуществляет условную компиляцию при неопределённости символической константы +  ifndef — осуществляет условную компиляцию при неопределённости символической константы 
-  else — ветка условной компиляции при ложности выражения +  else — ветка условной компиляции при ложности выражения 
-  elif — ветка условной компиляции, образуемая слиянием else и if +  elif — ветка условной компиляции, образуемая слиянием else и if 
-  endif — конец ветки условной компиляции +  endif — конец ветки условной компиляции 
-  line — препроцессор изменяет номер текущей строки и имя компилируемого файла +  line — препроцессор изменяет номер текущей строки и имя компилируемого файла 
-  error — выдача диагностического сообщения +  error — выдача диагностического сообщения 
-  pragma — действие, зависящее от конкретной реализации компилятора+  pragma — действие, зависящее от конкретной реализации компилятора 
 +==== Макросы ==== 
 +<code c>#define max(a,b) ((a) > (b) ? (a) : (b))</code> 
 +=== Операторы # и ## === 
 +<code c>#define make_str(bar) # bar 
 +printf(make_str(42)); 
 +</code> 
 +преобразуется в  
 +<code c>printf("42");</code> 
 +<code c>#define MakePosition(x) x##X,x##Y,x##Width,x##Height 
 +int MakePosition(Object); 
 +</code> 
 +преобразуется в  
 +<code c>int ObjectX,ObjectY,ObjectWidth,ObjectHeight;</code> 
 +=== undef === 
 +После строки 
 +<code c> #undef идентификатор</code> 
 +препроцессор считает, что //идентификатор// не определён. Это может помочь нам в случае условной компиляции. 
 +==== Ссылки ==== 
 +  * [[http://gcc.gnu.org/onlinedocs/cpp/|CPP (the C preprocessor from gcc project]] 
 +  * [[http://info.fenster.name/clectures/lecture08.pdf|Фенстер]]