Preprocessor
Function Macros
Function-like macros substitute an expression at each call site.
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.
Function Macros
function_macros.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
#define DOUBLE(n) ((n) * 2)
int main(void) {
int count = 4;
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 = 7;
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 = 9;
int result = ((count + 1) * 2);
printf("result=%d\n", result);
return 0;
}
count ← 4, result ← 10
5int main(void) {6 int count→ 4 = 4; //@count=7, 97 int result→ 10 = ((count4 + 1) * 2);89 printf("result=%d\n", result10);10 return 0;11}outputresult=10
count ← 7, result ← 16
5int main(void) {6 int count→ 7 = 7;7 int result→ 16 = ((count7 + 1) * 2);89 printf("result=%d\n", result16);10 return 0;11}outputresult=16
count ← 9, result ← 20
5int main(void) {6 int count→ 9 = 9;7 int result→ 20 = ((count9 + 1) * 2);89 printf("result=%d\n", result20);10 return 0;11}outputresult=20