A.8 Препроцессор |
Предыдущая Содержание Следующая |
ANSI-C больше не разворачивает #define рекурсивно; поэтому вызовы функций могут быть скрыты или упрощены макросами с теми же именами:
#define malloc(type) (type *) malloc(sizeof(type))
int * p = malloc(int);
Если определён макрос с параметрами, ANSI-C распознает такой вызов только если имя макроса появляется перед левой скобкой; поэтому распознавание макроса может быть подавлено в заголовке функции заключением имени такой функции дополнительным набором круглых скобок:
#include <stdio.h> определяет putchar(ch) как макрос
int (putchar) (int ch) { ... } имя не заменяется
По той же причине определение параметрического макроса больше не вступает в противоречие с переменной того же имени:
#define x(p) (((const struct Object *)(p)) -> x)
int x = 10; имя не заменяется
|
Предыдущая Содержание Следующая |