define定义的宏中,能否带有预编译指令,可否带有#号[转]

define定义的宏中,能否带有预编译指令,可否带有#号

define定义的宏中,能否带有预编译指令,可否带有#号

咱们项目每一个TUXEDO服务前都要有个
[code]#if defined(__STDC__) || defined(__cplusplus)
SVCBILLCYCLE(TPSVCINFO *rqst)
#else
SVCBILLCYCLE(rqst)
TPSVCINFO *rqst;
#endif[/code]

想用个宏来替换
[code]#define FUNCTION_D(x) void \
#if defined(__STDC__) || defined(__cplusplus)\
SVCBILLCYCLE(TPSVCINFO *rqst) \
#else \
SVCBILLCYCLE(rqst) \
TPSVCINFO *rqst; \
#endif\[/code]

编译时出错
-->

由于C语言中"#"和"##"都已经有意义,因此会出错。

那在#define中,怎么才能带有"#"字符?
define定义的宏中,能否带有预编译指令,可否带有#号

还有怎样才能显示双引号?
例如
#define foo(bar) "bar"
我想获得变量名所表示的字符串常量
foo(hi) -->; "hi"
foo(i) -->; "i"
define定义的宏中,能否带有预编译指令,可否带有#号

"\"bar\""
这样应该能够.
define定义的宏中,能否带有预编译指令,可否带有#号

SVCBILLCYCLE(TPSVCINFO *rqst)后面加个;试试
define定义的宏中,能否带有预编译指令,可否带有#号

2楼的:
#define foo(bar) "\"bar\""
define定义的宏中,能否带有预编译指令,可否带有#号

楼上说的不行
个人意思是由变量的名字产生一个字符串

例如
int hi;
char *hello;

foo(hi) 输出是   "hi"
foo(hello) 输出是 "hello"
define定义的宏中,能否带有预编译指令,可否带有#号

那你只能在编译的时候 -D 实现了.

知道什么叫宏定义吗? 编译的时候就替换了..你想动态的替换那就用函数.别用宏
define定义的宏中,能否带有预编译指令,可否带有#号

-->

你楼上说的很对,除非你本身表达得不对。
难道是这个?#define foo(x) ##x
foo(woodhead)输出woodhead
define定义的宏中,能否带有预编译指令,可否带有#号

-->

gcc编译错误
'##' cannot appear at either end of a macro expansion

gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81)


个人意思就是foo(x)被替换成"x"  
:em06:   :em06: :em06:   :em06:   :em06:
define定义的宏中,能否带有预编译指令,可否带有#号

#define fo(x)          \
   "\""##x##"\""
define定义的宏中,能否带有预编译指令,可否带有#号 楼上的 warning: pasting ""\""" and "x" does not give a valid preprocessing token 试了一下,应该是 #define foo(x) #x 谢谢各位的解答!
相关文章
相关标签/搜索