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) |