Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Macro Substitution. C++ препроцессор может определить текстовую замену всюду по всему файлу исходного текста



C++ препроцессор может определить текстовую замену всюду по всему файлу исходного текста. Это известно как макро-замена. Программисты реализуют макро-замену директивой #define препроцессора, которая может принять следующую форму.

#define identifier replacement-text

Example 1 General form of a #define directive

Используя #define директиву, программист объявляет идентификатор и определяет его текст замены. Макро-замена в файле исходного текста вовлекает препроцессор, заменяющий каждое возникновение идентификатора с текстом замены. Распечатка 2 иллюстрирует макро-определение и использование.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: #include <iostream>#include <cstdlib> #define MAXIMUM 20 using namespace std; int main(int argc, char* argv[]) { for (int i = 0; i < MAXIMUM; i++) { cout << i << endl; } return EXIT_SUCCESS;}
Listing 2 Macro substitution

Мы можем использовать макро-замену, постоянной переменной. В вышеупомянутой распечатке #define создает идентификатор под названием MAXIMUM, и связывает с этим текст замены 20. Где-нибудь в исходном тексте программы, препроцессор находит MAXIMUM, он заменяет 20. Макро-замена, в этом случае, позволяет MAXIMUM идентификатора функционировать как постоянная переменная.

C++ программисты должен использовать константу ключевого слова вместо макро-замены, чтобы создать постоянные переменные. Поскольку константа ключевого слова - часть C++ язык (и не особенность препроцессора), константы, созданные с этим тип поддержки, лучше чем константы, созданные, используя макро-замену.

C++ препроцессор также поддерживает макроопределение. Использование параметризовавшего макроса очень напоминает нормальную C++ функцию. Препроцессор заменяет очевидный вызов функции макро-текстом замены. Параметризовавшее макро-определение принимает следующую форму.

#define identifier(identifier, identifier,...) replacement-text

Example 2 General form of a parameterized macro

Следующая распечатка демонстрирует определение и использование параметризовавшего макроса.

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: #include <iostream>#include <cstdlib> #define max(x,y) (((x)>(y))? (x):(y)) using namespace std; int main(int argc, char* argv[]) { int i = 4; int j = 3; cout << max(i, j) << endl; return EXIT_SUCCESS;}
Listing 3 Parameterized macro

В листинге 3 препроцессор заменяет идентификатор max текстом, "(((x)> (y))? (x): (y)". Во время замены препроцессор заменяет в текст замены текстом, данным как параметры. В линии 13, данные параметры являются "i" и "j". Препроцессор заменяет этим текстом параметры x и y в тексте замены.





Дата публикования: 2014-12-08; Прочитано: 242 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...