ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4270
Скачиваний: 28
Глава 9. Директивы препроцессора
131
Здесь
шаблон
— это последовательность лексем, содержащая па-
раметр, которому предшествует символ
#
. При обработке макро-
команды пробелы, следующие до и после шаблона, удаляются.
А при преобразовании шаблона в строку несколько пробелов ме-
жду лексемами заменяются одним пробелом. Кроме того, при
использовании оператора
#
нужно учитывать следующие ограни-
чения:
порядок вычисления нескольких операторов
#
и
##
в шаблоне
не определен;
если шаблон содержит лексемы, которые являются строками
языка программирования C, и эти лексемы следуют после па-
раметра, то они соединяются с ним как строки.
Например, определим макрокоманду:
#define print_str(x) printf("%s", #x "\n")
Используя эту макрокоманду, вывести на печать строку можно
следующим образом:
print_str(This is a string);
Оператор
#
используется для упрощения вывода на печать строк
в формате языка программирования C. Например, при помощи
макрокоманды
print_str
можно вывести на печать следующую
строку:
print_str("\This is a string/");
9.11. Оператор
##
Оператор
"##"
служит для соединения двух параметров макро-
команды в одну последовательность символов. Такая макроко-
манда должна иметь следующий вид:
#define имя(список_параметров) шаблон
Здесь
шаблон
— это последовательность лексем, содержащая два
параметра макрокоманды, которые соединены символами
##
. На-
пример, определим макрокоманду:
#define var(type, s, var) type##s var
Часть I. Язык программирования С
132
Используя эту макрокоманду, можно определить указатель на
целочисленную переменную:
var(int, *, n);
При использовании оператора
##
нужно учитывать, что порядок
вычисления нескольких таких операторов в шаблоне макро-
команды не определен.
9.12. Предопределенные
макрокоманды
Следующие макрокоманды предопределены в препроцессоре и не
могут быть изменены программистом:
__DATE__
— строка с датой;
__TIME__
— строка со временем;
__FILE__
— строка с именем исходного файла;
__LINE__
— номер текущей строки;
__STDC__
— константа, которая равна 1, если компилятор под-
держивает стандартный язык C, в противном случае — рав-
на 0.
Например, следующие инструкции распечатывают значения, ко-
торые дают эти макрокоманды:
printf("Date = %s\n", __DATE__);
printf("Time = %s\n", __TIME__);
printf("File = %s\n", __FILE__);
printf("Line = %d\n", __LINE__);
ЧАСТЬ
II
Язык программирования С++
Глава 10.
Дополнения к типам данных языка С
Глава 11.
Дополнение к функциям языка C
Глава 12.
Пространства имен
Глава 13.
Обработка исключений
Глава 14.
Классы
Глава 15.
Конструкторы и деструкторы
Глава 16.
Перегрузка операторов
Глава 17.
Наследование классов
Глава 18.
Шаблоны функций
Глава 19.
Шаблоны классов
Г Л А В А
10
Дополнения
к типам данных языка С
10.1. Тип данных
bool
В языке программирования C++ введен новый встроенный тип
данных
bool
. Переменная типа
bool
может принимать одно из
двух значений:
true
или
false
. Например:
bool b = true;
Объекты типа
bool
неявно преобразуются в объекты типа
int
.
А именно
false
в
0
и
true
в
1
. Обратно, любое целое значение
может быть явно преобразовано в значение типа
bool
. А именно
0
в
false
и не
0
в
true
. Например:
bool b;
b = 0;
b = (bool)10;
10.2. Тип данных
wchar_t
Тип данных
wchar_t
является целочисленным типом данных, для
хранения значений которого используются 2 байта. Следователь-
но, диапазон типа
wchar_t
включает значения от 0 до 65 535.
Тип данных
wchar_t
предназначен для хранения широких симво-
лов. Символ называется
широким
(wide), если для хранения кода
этого символа требуется 2 байта. Для кодировки символов раз-