pam*_*bda 1 c unix linux macros c-preprocessor
我试图定义一个有两行/语句的宏,它就像:
#define FLUSH_PRINTF(x) printf(x);fflush(stdout);
Run Code Online (Sandbox Code Playgroud)
但由于C宏无法与';'一起使用,因此无法正常工作.
有没有合理的解决方法?
PS: 我知道上面的例子很奇怪,我应该使用类似普通函数的东西. 但这只是一个简单的例子,我想问一下如何定义一个多语句宏.
这是使用这个do { ... } while (0)成语的合适时间.这也是使用可变参数宏参数的合适时间.
#define FLUSH_PRINTF(...) \
do { \
printf(__VA_ARGS__); \
fflush(stdout); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
您也可以使用包装函数执行此操作,但由于使用时需要额外的样板,因此输入更多vprintf.
#include <stdarg.h>
#include <stdio.h>
/* optional: */ static inline
void
flush_printf(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vprintf(fmt, ap);
va_end(ap);
fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |