|
发表于 2023-1-15 14:23:38
|
显示全部楼层
- sh-5.1$ cat main.c
- //#include<stdio.h>
- //#include<string.h>
- #define TOUPPER(c) (((c)>='a'&&(c)<='z')?((c)-'a'+'A'):(c))
- int main()
- {
- char s[100];
- strcpy(s,"abcd");
- int i = 0;
- putchar(TOUPPER(s[++i]));
- printf("\n%d", i);
- return 0;
- }
- sh-5.1$ gcc -E main.c
- # 0 "main.c"
- # 0 "<built-in>"
- # 0 "<command-line>"
- # 1 "/usr/include/stdc-predef.h" 1 3 4
- # 0 "<command-line>" 2
- # 1 "main.c"
- int main()
- {
- char s[100];
- strcpy(s,"abcd");
- int i = 0;
- putchar((((s[++i])>='a'&&(s[++i])<='z')?((s[++i])-'a'+'A'):(s[++i])));
- printf("\n%d", i);
- return 0;
- }
- sh-5.1$
复制代码
看到了吗,看那个putchar
putchar(TOUPPER(s[++i]));
这个经过预处理后就变成下面这样了
putchar((((s[++i])>='a'&&(s[++i])<='z')?((s[++i])-'a'+'A'):(s[++i])));
宏替换就是单纯的替换
|
|