作者RishYang (Rish)
看板C_and_CPP
标题Re: [问题] 九九乘法表不用回圈是叫我直接从1列到81?
时间Thu May 16 21:59:29 2019
小的今天才跟到九九乘法系列文
X Macros好像还没有被实作
献丑了
#include <stdio.h>
#define V1(i) \
X((i), 1) \
X((i), 2) \
X((i), 3) \
X((i), 4) \
X((i), 5) \
X((i), 6) \
X((i), 7) \
X((i), 8) \
X((i), 9)
#define V2 \
Y(1) \
Y(2) \
Y(3) \
Y(4) \
Y(5) \
Y(6) \
Y(7) \
Y(8) \
Y(9)
int main()
{
#define X(i, a) printf("%02d X %02d = %02d\n", i, a, i*a);
#define Y(i) V1(i)
V2
#undef Y
#undef X
return 0;
}
-------------------
大Guy4酱
-------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.142.124.77
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1558015171.A.4A6.html
1F:推 timmy999: 我新手只会回圈 可以稍微解释一下吗? 05/16 22:46
2F:→ CCWck: 唯一的一行code在V2,然後就一直展开 05/16 23:43
3F:→ CCWck: 和call function有点像9个 05/16 23:44
4F:→ RishYang: 没错,V2是一堆Y(i)的替换,Y(i)又是V1(i)的替换 05/17 00:21
5F:→ RishYang: V(i)又是一堆X(i, a)的替换,X(i,a)就是最後的prinf 05/17 00:23
6F:→ CCWck: 不过我不懂为什麽两个define要在main里面再undef 05/17 00:36
7F:→ RishYang: 在此可以不undef,因为这种展开常常会重新定义 05/17 00:45
9F:推 CCWck: 那为何要放在main里面 05/17 00:59
10F:→ RishYang: 因为展开过後有81个printf,放在main里面执行很适合 05/17 01:23
11F:推 Schottky: 推 05/17 12:58
12F:→ Killercat: gcc编的话 gcc -E展开看就知道了 05/22 20:05
13F:→ Killercat: -E(还是-e 忘了)会展开所有#define印出来 05/22 20:05
14F:→ Killercat: 然後看最後几行即可 前面都不用看 05/22 20:09
15F:→ RishYang: 把#include注解,产生的预处理结果就不会太长 05/22 20:40