[語法] 關於 preprocessor 的問題
如果原本的程式是這樣寫的:
1 #include <stdio.h>
2
3 #define debug(fmt, ...) fprintf(stderr, fmt "\n", __VA_ARGS__)
4
5 int main()
6 {
7 debug("Hello world");
8 }
那麼就會因為多了一個 , 而導致編譯失敗:
int main()
{
fprintf(stderr, "Hello world" "\n", );
}
但如果在 __VA_ARGS__ 前加上 ## 的話:
1 #include <stdio.h>
2
3 #define debug(fmt, ...) fprintf(stderr, fmt "\n", ##__VA_ARGS__)
4
5 int main()
6 {
7 debug("Hello world");
8 }
這個冒號就會被自動消除了,而編譯成功:
int main()
{
fprintf(stderr, "Hello world" "\n");
}
在這個網頁裡:http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html
有解釋會發生這種情況,但我還是不明白它的原因
所以我的問題是:
不知道什麼時候該加 #,什麼時候該加 ##,什麼時候都不用加
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
推
11/13 15:54, , 1F
11/13 15:54, 1F
→
11/13 15:55, , 2F
11/13 15:55, 2F
→
11/13 15:55, , 3F
11/13 15:55, 3F
→
11/13 15:56, , 4F
11/13 15:56, 4F
→
11/13 15:56, , 5F
11/13 15:56, 5F
→
11/13 15:56, , 6F
11/13 15:56, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章