При чтении кодов моего группового проекта я сталкиваюсь со многими 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)
? Какая польза?