Директива сообщает компилятору об изменении имени файла и порядка нумерации строк (следующая строка имеет номер константа+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, содержит целое значение, определяющее тип процессора.