59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Macros in C
 | |
| ---
 | |
| ## Macros in C
 | |
| 
 | |
| A macro is a piece of code with a given name. When the name is used, it is replaced by the content of the macro.
 | |
| 
 | |
| #### Defining macros
 | |
| The `#define` keyword is used to define new macros. It's followed by a name and a content. By convention, macro names are written in uppercase.
 | |
| ```C
 | |
| #define PI 3.14
 | |
| ```
 | |
| 
 | |
| If you use the macro this way:
 | |
| ```C
 | |
| printf("Value of PI: %d", PI);
 | |
| ```
 | |
| Is the same as write this:
 | |
| ```C
 | |
| printf("Value of PI: %d", 3.14);
 | |
| ```
 | |
| 
 | |
| #### Types of macros
 | |
| There are two type of macros. The `Object-like` macros, showed above, and the `Function-like` macros.
 | |
| 
 | |
| #### Function-like Macros
 | |
| Function-like uses the same `#define` keyword. The difference is that you use a pair o parentheses after the function name.
 | |
| ```C
 | |
| #define hello_world() printf("Hello World!")
 | |
| ```
 | |
| So calling:
 | |
| ```C
 | |
| hello_world()
 | |
| ```
 | |
| You get:
 | |
| ```C
 | |
| printf("Hello World!");
 | |
| ```
 | |
| You can set parameters too:
 | |
| ```C
 | |
| #define hello(X) printf("Hello " X "!")
 | |
| ```
 | |
| Now calling:
 | |
| ```C
 | |
| hello("World");
 | |
| ```
 | |
| You get the equivallent of:
 | |
| ```C
 | |
| printf("Hello World!");
 | |
| ```
 | |
| 
 | |
| #### More Information:
 | |
| <!-- Please add any articles you think might be helpful to read before writing the article -->
 | |
| [GCC Online Documentation: Macros](https://gcc.gnu.org/onlinedocs/cpp/Macros.html)
 | |
| 
 | |
| [GCC Online Documentation: Object-like macros](https://gcc.gnu.org/onlinedocs/cpp/Object-like-Macros.html#Object-like-Macros)
 | |
| 
 | |
| [GCC Online Documentation: Function-like macros](https://gcc.gnu.org/onlinedocs/cpp/Function-like-Macros.html#Function-like-Macros)
 |