iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

C 語言筆記系列 第 25

[C 語言筆記--Day25] 不只有一個 expression 的 macro

大綱

1. 不只有一個 expression 的 macro
2. 使用 code block 解決會發生什麼問題?
3. do-while 的寫法
4. 參考資料

1. 不只有一個 expression 的 macro

如果以下的兩個 expression 想要寫成 macro:

gets(s);
puts(s);

可以被定義成:

#define ECHO(s) (gets(s), puts(s))

2. 使用 code block 解決會發生什麼問題?

如果寫成這樣會有問題:

// buggy !
#define ECHO(s) { gets(s); puts(s); }

問題在於使用 if-else 語法時如果寫成

if (echo_flag)
    ECHO(str);
else
    gets(str);

會變成

if (echo_flag)
    { gets(s); puts(s); };
else
    gets(str);

這樣了話 if 會跟 else 接不上,error

當然也可以寫成把ECHO(str); 的分號刪掉,這樣就沒問題了,

不過程式碼會變得很奇怪:

if (echo_flag)
    ECHO(str)
else
    gets(str);

3. do-while 的寫法

寫成這樣比較漂亮,因為 do-while 後面本來就需要加分號,

所以前面的問題都可以解決:

#define ECHO(s)     \
    do {            \
        gets(s);    \
        puts(s);    \
    } while(0)

4. 參考資料

C Programming: A Modern Approach, 2/e


上一篇
[C 語言筆記--Day24] sleep
下一篇
[C 語言筆記--Day25] fork() 的小小練習
系列文
C 語言筆記30

尚未有邦友留言

立即登入留言