Ситаксис:
#define имя-макроса заменяемая-строка
Команда #define используется для организации замены строки по всему файлу, где она указана. Другими словами, #define приводит к тому, что компилятор (препроцессор) проходит по всему файлу и делает замену имя-макроса на заменяемая-строка.
Это типичный пример использования #define (как минимум в C):
#define TRUE 1 #define FALSE 0 ... int done = 0; while( done != TRUE ) { ... }
Другая возможность команды #define это возможность обрабатывать аргументы, что дает возможность создавать псевдофункции. Например такой код:
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) ) ... int num = -1; while( absolute_value( num ) ) { ... }
Хорошим стилем будет использовать дополнительные скобки в сложных макросах. В примере выше переменная «x» всегда окружена своими собственными круглыми скобками. В этом случае выражение будет вычесленно полностью перед сравнением с 0 или умножением на -1. Также, окружая скобками параметры, мы предовращаем загрязнение кода . Если не быть осторожным, то возможна ситуация, когда компилятор будет неверно интерпретировать ваш код. Ниже пример использования команды #define для создания цикла, который будет вызывать функцию печати чисел от 1 до 20:
#define count_up( v, low, high ) \ for( (v) = (low); (v) <= (high); (v)++ ) ... int i; count_up( i, 1, 20 ) { printf( "i is %d\n", i ); }
Смотри также: # и ##, #if,...,#endif, #undef