作者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/m.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