Re: [問題] 九九乘法表不用迴圈是叫我直接從1列到81?

看板C_and_CPP作者 (Rish)時間5年前 (2019/05/16 21:59), 編輯推噓3(3012)
留言15則, 5人參與, 5年前最新討論串29/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; } ------------------- 大Guy4醬 ------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.124.77 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1558015171.A.4A6.html

05/16 22:46, 5年前 , 1F
我新手只會迴圈 可以稍微解釋一下嗎?
05/16 22:46, 1F

05/16 23:43, 5年前 , 2F
唯一的一行code在V2,然後就一直展開
05/16 23:43, 2F

05/16 23:44, 5年前 , 3F
和call function有點像9個
05/16 23:44, 3F

05/17 00:21, 5年前 , 4F
沒錯,V2是一堆Y(i)的替換,Y(i)又是V1(i)的替換
05/17 00:21, 4F

05/17 00:23, 5年前 , 5F
V(i)又是一堆X(i, a)的替換,X(i,a)就是最後的prinf
05/17 00:23, 5F

05/17 00:36, 5年前 , 6F
不過我不懂為什麼兩個define要在main裡面再undef
05/17 00:36, 6F

05/17 00:45, 5年前 , 7F
在此可以不undef,因為這種展開常常會重新定義
05/17 00:45, 7F

05/17 00:46, 5年前 , 8F
05/17 00:46, 8F

05/17 00:59, 5年前 , 9F
那為何要放在main裡面
05/17 00:59, 9F

05/17 01:23, 5年前 , 10F
因為展開過後有81個printf,放在main裡面執行很適合
05/17 01:23, 10F

05/17 12:58, 5年前 , 11F
05/17 12:58, 11F

05/22 20:05, 5年前 , 12F
gcc編的話 gcc -E展開看就知道了
05/22 20:05, 12F

05/22 20:05, 5年前 , 13F
-E(還是-e 忘了)會展開所有#define印出來
05/22 20:05, 13F

05/22 20:09, 5年前 , 14F
然後看最後幾行即可 前面都不用看
05/22 20:09, 14F

05/22 20:40, 5年前 , 15F
把#include註解,產生的預處理結果就不會太長
05/22 20:40, 15F
文章代碼(AID): #1StMp3Ic (C_and_CPP)
討論串 (同標題文章)
完整討論串 (本文為第 29 之 29 篇):
文章代碼(AID): #1StMp3Ic (C_and_CPP)