【发布时间】:2010-04-25 04:27:32
【问题描述】:
在阅读我的小组项目的代码时,我遇到了很多 DEFINE,其中一些看起来很奇怪。为了概括它,请看以下 2 个示例。
示例 1:
#define SNPRINTF(dst, fmt, arg...) snprintf(dst, sizeof(dst), fmt, ##arg)
在这种情况下,“##”是什么意思?我试图删除它们,并编写诸如“char buf[1024]; SNPRINTF(buf,"%s,%s","abcd","efg");" 之类的代码产生了相同的结果。所以“##”对我来说似乎没有用也没有伤害。
示例 2:
#define CLOSE(fd) do { \
if (-1 != (fd)) { \
close(fd); \
(fd) = -1; \
} \
} while (0)
需要将内部代码填充到do{}while(0) 语句中吗?什么用途?
【问题讨论】:
-
do...while 问题之前已经回答过了。我会尝试挖掘一个链接。
-
只找到问题的##部分:stackoverflow.com/questions/2025858/…
-
@dmckee 感谢您提供宝贵的链接!怎么“挖”?只是凭记忆,还是网站除了标签之外还为我们提供了一些有用的工具?
-
搜索有一些操作符在这里描述stackoverflow.com/search,但主要是我翻遍了搜索结果的页面。当您知道答案就在那里时,这会更容易忍受。
标签: c c-preprocessor