Define macros let you give a name to a value or code snippet. This makes your code easier to read and change.
You want to give a name to a number or text used many times.
You want to create a shortcut for a piece of code you use often.
You want to make your program easier to update by changing one place.
You want to avoid repeating the same value or code in many places.
Syntax
C
#define NAME value_or_code
Macros are replaced by the preprocessor before the program runs.
Macros do not use memory like variables.
Examples
This defines PI as 3.14 everywhere in the code.
C
#define PI 3.14
This defines a macro to find the maximum of two values.
C
#define MAX(a,b) ((a) > (b) ? (a) : (b))
This defines a text macro for a greeting message.
C
#define GREETING "Hello, friend!"
Sample Program
This program uses macros to define PI and a formula to calculate the area of a circle. It then prints the area for radius 5.0.
C
#include <stdio.h>
#define PI 3.14
#define AREA_OF_CIRCLE(r) (PI * (r) * (r))
int main() {
double radius = 5.0;
double area = AREA_OF_CIRCLE(radius);
printf("Area of circle with radius %.1f is %.2f\n", radius, area);
return0;
}
OutputSuccess
Important Notes
Macros are simple text replacements done before the program runs.
Be careful with parentheses in macros to avoid unexpected results.
Macros do not have types like variables do.
Summary
Define macros give names to values or code snippets.
They help make code easier to read and update.
Macros are replaced before the program runs, so they do not use memory.
Practice
(1/5)
1. What does the #define directive do in C?
easy
A. It creates a macro that replaces text before compilation.
B. It declares a variable with a fixed value.
C. It defines a function that runs at runtime.
D. It allocates memory for a constant.
Solution
Step 1: Understand the purpose of #define
The #define directive tells the compiler to replace all occurrences of a name with a given value or code snippet before the program runs.
Step 2: Differentiate from variables and functions
Unlike variables or functions, macros do not allocate memory or run at runtime; they are simple text replacements done before compilation.
Final Answer:
It creates a macro that replaces text before compilation. -> Option A
Quick Check:
#define = text replacement [OK]
Hint: Macros replace text before running code [OK]
Common Mistakes:
Thinking macros allocate memory
Confusing macros with functions
Assuming macros run at runtime
2. Which of the following is the correct syntax to define a macro named PI with value 3.14?
easy
A. #define PI 3.14
B. #define PI = 3.14
C. define PI 3.14
D. #define(PI, 3.14)
Solution
Step 1: Recall correct #define syntax
The correct syntax is #define NAME value without an equal sign or parentheses.
Step 2: Check each option
#define PI = 3.14 uses an equal sign which is incorrect. define PI 3.14 misses the #. #define(PI, 3.14) uses parentheses incorrectly. Only #define PI 3.14 matches the correct syntax.
Final Answer:
#define PI 3.14 -> Option A
Quick Check:
Correct macro syntax = #define NAME value [OK]
Hint: No equal sign in macro definitions [OK]
Common Mistakes:
Adding '=' sign after macro name
Omitting '#' in #define
Using parentheses like a function
3. What is the output of this C code?
#include <stdio.h>
#define SQUARE(x) ((x) * (x))
int main() {
int a = 3;
printf("%d", SQUARE(a + 1));
return 0;
}
medium
A. Error
B. 7
C. 10
D. 16
Solution
Step 1: Expand the macro with argument
The macro call SQUARE(a + 1) expands to ((a + 1) * (a + 1)).
Hint: Remember to expand macros fully before calculating [OK]
Common Mistakes:
Not using parentheses in macro causing wrong order
Calculating as 3 + 1 * 3 + 1 = 7
Assuming macro is a function call
4. Identify the error in this macro definition:
#define MAX(a, b) a > b ? a : b
medium
A. Macro names cannot have parameters
B. Incorrect use of ? operator
C. Missing parentheses around the entire macro expression
D. Missing semicolon at the end
Solution
Step 1: Analyze macro expression grouping
The macro expands to a > b ? a : b without parentheses, which can cause wrong evaluation when used in expressions.
Step 2: Understand importance of parentheses
Wrapping the entire macro in parentheses like ((a) > (b) ? (a) : (b)) ensures correct order and prevents bugs.
Final Answer:
Missing parentheses around the entire macro expression -> Option C
Quick Check:
Always parenthesize macro expressions [OK]
Hint: Wrap macro expressions in parentheses to avoid errors [OK]
Common Mistakes:
Not using parentheses around macro body
Assuming macros behave like functions
Adding semicolon inside macro definition
5. You want to create a macro MIN that returns the smaller of two values x and y. Which of the following is the best macro definition to avoid common bugs?
hard
A. #define MIN(x, y) ((x < y) ? x : y)
B. #define MIN(x, y) ((x) < (y) ? (x) : (y))
C. #define MIN(x, y) (x < y ? x : y)
D. #define MIN(x, y) x < y ? x : y
Solution
Step 1: Check for parentheses around parameters
#define MIN(x, y) ((x) < (y) ? (x) : (y)) wraps each parameter in parentheses to avoid issues when arguments are expressions.
Step 2: Check for parentheses around entire expression
#define MIN(x, y) ((x) < (y) ? (x) : (y)) also wraps the whole expression in parentheses to ensure correct evaluation in larger expressions.
Step 3: Compare with other options
Options A, B, and C miss some parentheses, risking wrong results or precedence bugs.