Макросы (C/C++)
Предварительная обработка развернуть макросов во всех линиях, которые не являются директив препроцессора (линий, которые не имеют a # по мере того, как первый символ non-бел-космической) и в частях некоторых рекомендаций, которые не пропущены как часть условной компиляции. "Директивы условной компиляции" позволяют отключать компиляцию частей файла источника путем проверки выражение или идентификатор константы для определения блоков текста, передаются по компилятору, блоки текста, удаляются из исходного файла во время предварительной обработки.
#define директива обычно используется, чтобы связать значимые идентификаторы с константами, ключевыми словами и часто используемыми выписками или выражениями.Идентификаторы, представляющие константы иногда называются "символическими константами" или "константам манифеста". Идентификаторы, представляющие выписки или выражения, называются "макросы". В этой документации препроцессора, используется только термин "макрос".
Если имя макроса в исходном тексте программы или в аргументах некоторых других команд препроцессора, интерпретируется как вызов этот макрос.Имя макроса заменяется копией тело макроса.Если макрос принимает аргументы, то действительные аргументы после имени макроса заменены на формальных параметров в теле макросов.Процесс заменить вызов макроса с обработанной копии текста сообщения называется "расширением" вызова макроса.
В практических термины, 2 типов макросов. "Объект-как" макросы не иметь аргументов, тогда как "функция-как" макросы могут быть заданы для принятия аргументы, чтобы они посмотрят и действуют как вызовы функций.Поскольку макросы не создают фактические вызовы функций иногда можно сделать программы выполняться быстрее, заменяя вызовы функций с макросами.(В C++ встроенные функции часто метод является предпочтительным.) Однако макросы могут создать проблемы, если не указан и не использовать их с осторожностью.Можно использовать скобки в определениях макросов с аргументами для сохранения нужный приоритет в выражении.Кроме того, макрос не могут правильно обработать выражения с побочными эффектами.См. getrandom пример в директива #define для получения дополнительных сведений.
После определения макроса, нельзя переопределить его к другому значению без сначала удалить исходное определение.Однако можно переопределить макрос с определением те же.Таким образом, в одно определение может появляться более одного раза в программу.
#undef директива удаляет определение макроса.После определения была удалена, можно переопределить макрос к другому значению.директива #define и #undef - Директива negotiate #define и #undef директивы, соответственно.
Дополнительные сведения см. в следующих разделах: