77 lines
2.3 KiB
Markdown
77 lines
2.3 KiB
Markdown
|
---
|
|||
|
title: Macros in C
|
|||
|
localeTitle: Макросы в C
|
|||
|
---
|
|||
|
## Макросы в C
|
|||
|
|
|||
|
Макрос представляет собой фрагмент кода с заданным именем. Когда имя используется, оно заменяется содержимым макроса.
|
|||
|
|
|||
|
#### Определение макросов
|
|||
|
|
|||
|
Ключевое слово `#define` используется для определения новых макросов. За ним следует имя и содержание. По соглашению имена макросов записываются в верхнем регистре.
|
|||
|
|
|||
|
```C
|
|||
|
#define PI 3.14
|
|||
|
```
|
|||
|
|
|||
|
Если вы используете макрос таким образом:
|
|||
|
|
|||
|
```C
|
|||
|
printf("Value of PI: %d", PI);
|
|||
|
```
|
|||
|
|
|||
|
То же самое, что и написать:
|
|||
|
|
|||
|
```C
|
|||
|
printf("Value of PI: %d", 3.14);
|
|||
|
```
|
|||
|
|
|||
|
#### Типы макросов
|
|||
|
|
|||
|
Существует два типа макросов. `Object-like` , показанные выше, и макросы, `Function-like` .
|
|||
|
|
|||
|
#### Функциональные макросы
|
|||
|
|
|||
|
Функция-подобное использует одно и то же ключевое слово `#define` . Разница в том, что вы используете пару круглых скобок после имени функции.
|
|||
|
|
|||
|
```C
|
|||
|
#define hello_world() printf("Hello World!")
|
|||
|
```
|
|||
|
|
|||
|
Итак, позвонив:
|
|||
|
|
|||
|
```C
|
|||
|
hello_world()
|
|||
|
```
|
|||
|
|
|||
|
Ты получаешь:
|
|||
|
|
|||
|
```C
|
|||
|
printf("Hello World!");
|
|||
|
```
|
|||
|
|
|||
|
Вы также можете установить параметры:
|
|||
|
|
|||
|
```C
|
|||
|
#define hello(X) printf("Hello " X "!")
|
|||
|
```
|
|||
|
|
|||
|
Теперь вызывается:
|
|||
|
|
|||
|
```C
|
|||
|
hello("World");
|
|||
|
```
|
|||
|
|
|||
|
Вы получаете равноценность:
|
|||
|
|
|||
|
```C
|
|||
|
printf("Hello World!");
|
|||
|
```
|
|||
|
|
|||
|
#### Дополнительная информация:
|
|||
|
|
|||
|
[Документация онлайн GCC: макросы](https://gcc.gnu.org/onlinedocs/cpp/Macros.html)
|
|||
|
|
|||
|
[Документация по GCC: объектно-ориентированные макросы](https://gcc.gnu.org/onlinedocs/cpp/Object-like-Macros.html#Object-like-Macros)
|
|||
|
|
|||
|
[Документация онлайн GCC: функциональные макросы](https://gcc.gnu.org/onlinedocs/cpp/Function-like-Macros.html#Function-like-Macros)
|