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中,怎么才能带有"#"字符?
icon_new.gif define定义的宏中,可否带有预编译指令,能否带有#号

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

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

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

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

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

例如
int hi;
char *hello;

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

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

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

-->

你楼上说的很对,除非你自己表达得不对。
难道是这个?#define foo(x) ##x
foo(woodhead)输出woodhead
icon_new.gif 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:
icon_new.gif define定义的宏中,可否带有预编译指令,能否带有#号

#define fo(x)          \
   "\""##x##"\""
icon_new.gif define定义的宏中,可否带有预编译指令,能否带有#号

楼上的
warning: pasting ""\""" and "x" does not give a valid preprocessing token

试了一下,应该是
#define foo(x) #x


谢谢各位的解答!