Re: [问题] 九九乘法表不用循环是叫我直接从1列到81?

楼主: RishYang (Rish)   2019-05-16 21:59:29
小的今天才跟到九九乘法系列文
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;
}
作者: timmy999 (愤怒a阿宅)   2019-05-16 22:46:00
我新手只会循环 可以稍微解释一下吗?
作者: CCWck (干嘛要暱称)   2019-05-16 23:43:00
唯一的一行code在V2,然后就一直展开和call function有点像9个
楼主: RishYang (Rish)   2019-05-17 00:21:00
没错,V2是一堆Y(i)的替换,Y(i)又是V1(i)的替换V(i)又是一堆X(i, a)的替换,X(i,a)就是最后的prinf
作者: CCWck (干嘛要暱称)   2019-05-17 00:36:00
不过我不懂为什么两个define要在main里面再undef
楼主: RishYang (Rish)   2019-05-17 00:45:00
在此可以不undef,因为这种展开常常会重新定义像是https://reurl.cc/byleX
作者: CCWck (干嘛要暱称)   2019-05-17 00:59:00
那为何要放在main里面
楼主: RishYang (Rish)   2019-05-17 01:23:00
因为展开过后有81个printf,放在main里面执行很适合
作者: Schottky (顺风相送)   2019-05-17 12:58:00
作者: Killercat (杀人猫™)   2019-05-22 20:05:00
gcc编的话 gcc -E展开看就知道了-E(还是-e 忘了)会展开所有#define印出来然后看最后几行即可 前面都不用看
楼主: RishYang (Rish)   2019-05-22 20:40:00
把#include注解,产生的预处理结果就不会太长

Links booklink

Contact Us: admin [ a t ] ucptt.com