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