全局变量啊 全局变量

blackpool 2007-07-09 08:10:19
有如下宏定义:(两个宏定义在同一个头文件中)

//////////////////////////////////////////////////////////////////////
#define beginM(func) \
private: \
static void pStr() \
{ \

#define M(sourceline){ \ std::string anStr1(sourceline); \
}

#define endM \
} \
public:

//////////////////////////////////////////////////////////////////////
#define beginN(func) \
private: \
static void func(std::string & Nstring) \
{

#define N(sourceline){ \ std::string anStr2(sourceline); \
}

#define endN \
} \
public:

怎样把第一个宏中的anStr1传到第二个宏中去?使得第二个宏中也能使用到anStr1?
全局变量可以吗?

我定义了extern std::string gVal;
然后gVal=anStr1;
在第二个宏中用的时候有链接错误

指教!!!!! 谢谢!
...全文
362 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2007-07-10
  • 打赏
  • 举报
回复
感觉你第一个宏没写全嘛,至少没看到beginM(func)中的func在哪儿展开.
//当你在类中写下
class X
{
......
beginM(func)
M("message")
endM
......
};
展开后,在static函数pStr中定义了一个anStr1局部变量.在其他函数中根本没法使用.
extern 是针对全局变量的.




taodm 2007-07-10
  • 打赏
  • 举报
回复
抱歉,没看懂你在说什么。
贴你使用这些宏的代码来说需求。
blackpool 2007-07-10
  • 打赏
  • 举报
回复
taodm老大 偶都不想用宏的 但是基于别人的东西不能随便改动 不然问题早就解决了
公司的某个贱人说 不能改动API 我都无语了 (其实问题是有大量代码已经用到这些个宏,有上千个文件没法改)

原始需求就是输出信息(宏定义中anStr定义的信息),但是实现了第二个宏输出信息,第一个宏还是没办法,因为没有办法定义函数指针指向第一个宏定义的函数。现在想把第一个宏中的anStr的值(一个字符串)传递到第二个宏中,通过第二个宏输出。不知道有没有办法实现。

谢谢!
taodm 2007-07-10
  • 打赏
  • 举报
回复
比如说说你的原始需求吧。
你的原始需求,为啥一定要用宏来解决呢。
模板/继承。。。还有很多方法啊。
0黄瓜0 2007-07-10
  • 打赏
  • 举报
回复
如果你调用第二个宏之前没有调用过第一个宏和它产生的函数,那么__gstr是没有任何值.

fuzhufang 2007-07-10
  • 打赏
  • 举报
回复
我都不知到你为什么要用这两个宏,可读行不好。好好研究一下mfc下的宏吧,这才叫神奇。
blackpool 2007-07-10
  • 打赏
  • 举报
回复
To A_B_C_ABC(黄瓜@YouCanDoIt):

这么做编译没有错误 但是得不到任何结果 貌似__gstr没有任何值
0黄瓜0 2007-07-10
  • 打赏
  • 举报
回复
使用全局变量并修改第一个宏,可以在第二个宏中得到anStr1相同的值,但你要对全局变量可能带来的副作用有所了解.
可在第一个宏前面加全局变量std::string __gstr//全局变量名尽量复杂一点,免得冲突

#define M(sourceline){ \
std::string anStr1(sourceline); \
__gstr=anStr1;\
}
那么第二个宏中可直接使用__gstr得到anStr1相同的值.
believefym 2007-07-09
  • 打赏
  • 举报
回复
#define a aaaaa
像这种毫无意义的定义都是合法的,anStr1在宏里面不能作为一个变量名进行传递了
believefym 2007-07-09
  • 打赏
  • 举报
回复
应该不行吧,宏只是简单的替换,没有变量名的意义

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧