Директива нумерации строк

Формат директивы:

#line <константа> [“имя_файла”]

Директива сообщает компилятору об изменении имени файла и порядка нумерации строк (следующая строка имеет номер константа+1). Влияет на диагностические сообщения компилятора, может использоваться когда программа собирается из нескольких файлов.

 

Директива обработки ошибок

Формат директивы:

#error <текст>

Происходит печать текста, как правило, используется совместно с директивами условной компиляции. При выполнении директивы компиляция прерывается и выдается сообщение в виде представленного текста.

 

9.8. Директивы # и ##

Для повышения читабельности программ может использоваться пустая директива, состоящая из строки с символом #.

Кроме того, символ # может помещаться перед аргументом в строке текста макроопределения и указывает на необходимость его преобразования с символьную строку (помещается в “ “).

Директива ## используется в строке замещения в макроопределениях для склейки лексем.

Пример использования данных директив:

#include <stdio.h>

#include <math.h>

#define p(a) printf(#a) // Аргумент a будет заключен в ""

#define myfunc(fun,par) fun##(par) // Происходит соединение лексем

void main()

{

int x=10;

p(Hello); // Будет заменено на printf("Hello");

printf("\ncos(0.0)=%f", myfunc(cos,0.)); // Будет вызываться cos(0.)

}

 

Заранее определенные препроцессорные идентификаторы

 

Существуют заранее предопределенные в конкретной среде разработки препроцессорные идентификаторы. Приведем некоторые идентификаторы, существующие в среде Microsoft Visual C++:

__TIME__ - строка символов, содержащая время компиляции данного файла в формате hh:mm:ss (часы минуты секунды);

__DATE__ - строка символов, содержащая дату компиляции данного файла в формате Mmm dd yyyy (месяц день год);

__FILE__ - строка символов, содержащая полное имя компилируемого файла;

__LINE__ - целое значение (тип long), содержит номер текущей строки в компилируемом файле;

_WIN32 – идентификатор определен, если приложение компилируется в режиме Win32 или Win64 (значение 1);

__cplusplus - идентификатор определен, если приложение компилируется в режиме языка Си++ (а не Си);

_DEBUG - идентификатор определен, если приложение компилируется в режиме отладки (значение 1);

_M_IX86 - идентификатор определен для процессора типа x86, содержит целое значение, определяющее тип процессора.

 

Указания компилятору

#pragma <последовательность_символов>

Определяет зависящие от реализации указания компилятору (прагмы). Компилятор Visual C++ поддерживает следующие прагмы: alloc text, comment, optimize, auto_inline, component, inline_depth, pack, bss seg, data_seg, function, intrinsic, setlocale, code_seg, hdrstop, message, const seg, once, warning, inline recursion, check_stack, include_alias.

Например, директива

#pragma warning(disable: 4305)

предписывает компилятору не выдавать предупреждения с номером 4305, которое выдается при несовпадении типов данных.

#pragme inline

определяет, что в программе используются ассемблерные вставки.

 

 

Термины

Препроцессор языка Си представляет собой программу (подпрограмму), которая используется для обработки исходного файла на нулевой фазе компиляции.

Директивы препроцессора представляют инструкции, записанные в исходном тексте программы, облегчающие модификацию исходных программ и делающие их более независимыми от особенностей различных реализаций компилятора языка Си, разных компьютеров и операционных сред.

Макрос – это средство замены одной последовательности символов другой.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: