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