Preprocessor
Function Macros
Function-like macros substitute an expression at each call site.
Function Macros
function_macros.c
#include <stdio.h>
#define DOUBLE(n) ((n) * 2)
int main(void) {
int count = ;
int result = ((count + 1) * 2);
printf("result=%d\n", result);
return 0;
}
#include <stdio.h>
#define DOUBLE(n) ((n) * 2)
int main(void) {
int count = ;
int result = ((count + 1) * 2);
printf("result=%d\n", result);
return 0;
}
#include <stdio.h>
#define DOUBLE(n) ((n) * 2)
int main(void) {
int count = ;
int result = ((count + 1) * 2);
printf("result=%d\n", result);
return 0;
}
function-like macro
A macro can accept arguments, but it still expands as text before compilation.
parentheses
Parentheses around arguments and the whole result prevent common precedence bugs.
expanded expression
The replay uses the expanded expression directly because macro expansion happens before tracing.