【发布时间】:2017-09-18 01:18:38
【问题描述】:
我需要更改宏的实现(LOGGING_MACRO) printf 进入系统日志。
宏用法:
LOGGING_MACRO(5,("Value of x,y=%d,%d\n",x,y));
Def1:
#define LOGGING_MACRO(loglevel,str) printf str;
Def2:
#define LOGGING_MACRO(loglevel,str) syslog(loglevel,str);
注意:我无法更改宏格式:(
Def2 抛出错误,因为 syslog 不接受带有前后大括号的 'str'(2nd arg)。 [但使用 printf 在 Def1 中工作正常]
在将“str”传递给 syslog 之前,请建议如何从宏内部的“str”中删除第一个和最后一个大括号。
【问题讨论】:
-
举个例子你如何调用你的宏,因为这种方法
printf str;完全失败了。 -
@tilz0R 在“宏用法:”部分中给出
-
你好 DYZ 。调用宏时传递括号。
-
这不可能你直接问什么,但如果你使用局部变量,那么它可以做到。编辑:不,它不能。您的使用失败。
-
我可以通过任何其他方式在宏中编辑“str”的内容???
标签: c string parameter-passing c-preprocessor stringification