Школа создателей компьютерных игр

BannerDrive.ru
[Главная] [С чего начать?] [Дистанционное обучение] [Статьи] [Обучалки] [Книги] [Софт] [Форум] [Ссылки] [О сайте]

Директивы препроцессора



Подпишитесь на рассылку "Создание компьютерных игр"

Рассылки Subscribe.Ru
Создание компьютерных игр

Рассылка выходит раз в месяц.


Понравился сайт? Узнайте, как помочь сайту.


Рекомендуемые книги


Андре Ламот.
Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации


Андре Ламот.
Программирование игр для Windows. Советы профессионала


Проголосуйте за сайт в рейтинге GameTop!
(нажмите на кнопку рейтинга)

GameTop - рейтинг игровых ресурсов. Портал Rolemancer (www.rolemancer.ru)

Не забывайте, что результаты рейтинга обновляются раз в неделю. Пожалуйста, голосуйте почаще!


Статистика посещаемости

Rambler's Top100

Бинарные операторы | Все обучалки раздела | Функции

Описание

Директивы препроцессора - это куски программного кода, которые "обрабатываются" до компиляции программы. Обучалка объясняет работу некоторых основных директив препроцессора.

Программа демонстрирует на примерах работу основных директив препроцессора.

Скачать обучалку (Visual C++ 6)

Работа программы

Исходный код

/* Done by TheTutor -- 9/12/01

// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
  
  Эта обучалка о директивах препроцессора. Что же это такое? Есть "методы", которые 
  используются, чтобы файлы исходного кода было легко изменять и компилировать с
  различными установками компилятора. Эти методы могут сделать ваш код гораздо более
  легко читаемым и более пригодным к повторному использованию. Вы можете понять, что 
  видите директиву препроцессора, когда строка программы начинается с символа '#'.
  Этот символ обязан быть первым символом строки, содержащей директиву препроцессора.

  Директивы препроцессора обрабатываются ДО того, как компилируется исходный код.
  
  Имеется довольно большое число директив препроцессора, но эта обучалка коснется
  нескольких "основных" (полный список вы найдете в конце)

  А сейчас несколько примеров...
 */

#include <stdio.h> 
/*      Директива #include используется для подключения других
        файлов. Она берет подключаемый файл и его содержимое
        воспринимается так, как будто бы оно написано там, 
        где находится директива. #include используется для загрузки
        "стандартных заголовочных файлов" (которые позволяют вызывать
        функции С, такие как "printf()") -- Когда подключается стандартный
        файл, имя файла помещают в угловые скобки (например <stdio.h>) --
        Директива #include также используется чтобы подключить "заголовочные
        файлы, определяемые пользователем". Имена этих файлов помещают 
        в кавычки (например "main.h")
  */

#define NUM 1
                        // Директива #define используется в оснавном для подстановок
                        // Прежде чем .c файл будет скомпилирован, препроцессор
                        // заменит все встречающиеся в тексте "NUM" на "1"

// Как вы только что видели, #define использовалась для "целочисленных подстановок".
// Также ее можно использовать для символьных (текстовых) подстановок. И вновь, ДО
// компиляции файла с программой, препроцессор заменит все "TEXT", которые он найдет
// на "preprocessor directives"

#define TEXT "preprocessor directives"

// **Примечание** Это были только ДВА примера, как можно использовать #define для замен

int main()
{
      // Обратите внимание на подстановки, которые делаются в этих выражениях

      // Напечатать "NUM" на экран

      printf("%d\n",NUM);

      // Напечатать "TEXT" на экран

      printf("%s\n\n",TEXT);

/********************  #if, #else, и #endif ***************************/
/**********************************************************************/

#if NUM
                        /*  Директива #if работает именно так, как вы ожидали - ДО того, как
                        файл с программой будет скомпилирован, проверяется условие - если
                        оно истинно (т.е. не равно нулю), ВЕСЬ код между #if и #else 
                        компилируется -- Если оно ложно (т.е. равно нулю), код между #if и #else
                        НЕ будет скомпилирован (как будто бы его стерли). */
      
      printf("NUM is non-zero\n"); // ("NUM не равно нулю")


#else
            // Если выражение "#if NUM" ложно, будет компилироваться код между #else и #endif
            // Если выражение "#if NUM" истинно, код между #else и #endif НЕ будет
            // скомпилирован.

      printf("NUM is zero\n"); // ("NUM равно нулю")

#endif

/*      Для каждого #if вы должны иметь соответствующий #endif -- выражения #if могут быть вложенными
      Например вы можете написать:

      #if УСЛОВИЕ

            // Код

            #if ДРУГОЕ_УСЛОВИЕ

                  // Еще код

            #endif

  #endif

  Можно использовать #if для быстрого "комментирования" большого куска программы
  Просто напишите:

  #if 0

      // Большой кусок программы

  #endif

  Когда вы будете компилировать, ВЕСЬ код между #if и #endif НЕ будет компилироваться 
  
*/

   return 0; // Выход из main()

} // Конец main()

/*

  Есть еще одна часто используемая директива -- Вы увидите ее в начале "заголовочных файлов,
  определяемых пользователем", это директива препроцессора #ifndef.
  
  Следующая директива #ifndef вычисляется в значение "истинно"
      
  #ifndef 0
  
  Если идентификатор (ноль в примере выше) НЕ ОПРЕДЕЛЕН, условие истинно (не равно нулю).
  В другом случае, условие ложно (равно нулю).
  
  Предположим, что мы сделали заголовочный файл "main.h". Очень часто заголовочные файлы
  начинаются так:

  #ifndef MAIN_H
  #define MAIN_H

  // Содержимое заголовочного файла

  #endif

  Это делается для предотвращения "переопределения множественных заголовочных файлов" в
  проекте -- Таким способом у нас может быть много файлов .c, которые включают директивой
  #include тот же самый заголовочный файл без конфликтов.

  А теперь обещанный список директив препроцессора:  

  #define
  #elif
  #else
  #endif
  #error
  #if
  #ifdef
  #ifndef
  #import
  #include
  #line
  #pragma
  #undef

  Пока ваш уровень программирования не станет по крайней мере средним, вам не нужно волноваться
  по поводу директив, отличных от тех, которые мы обсудили (и даже будучи начинающим программистом
  вы вероятно будете на первых порах использовать только #include и #define)
*/

// www.GameTutorials.com -- ©2001

// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com 

Скачать обучалку (Visual C++ 6)

Бинарные операторы | Все обучалки раздела | Функции

[Главная] [С чего начать?] [Дистанционное обучение] [Статьи] [Обучалки] [Книги] [Софт] [Форум] [Ссылки] [О сайте]

Copyright © 2003-2005 Евгений Казеко. Все права защищены. E-mail: evgeniy@kazeko.com

оцилиндровочный станок , опалубка актуальная для Сочи , Теперь в наличае инфракрасная сушка на www.fortol.ru