#define LPRINT_END , __FUNCSIG__); #define LPRINT gFactory.getCLogManager().doPrint (
而在中间是一条日志信息
LPRINT "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG
没有关闭。
LPRINT (FUNCSIG, "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG);
要么在开头(FUNCSIG到#define,然后在结尾处加一个小括号
Nikolai Karetnikov:
假设我们想在一个宏中添加 __FUNCSIG__ 和 ErrorLast。当宏被调用时,在有其代码的行上会有一个闭合括号。所以,是的,一个念头闪过,有什么办法可以改善这个问题吗?
没有办法回答我的问题吗?
也许只是正常使用宏?当然,除非你的手掉了两个括号。
#define LP(X) Print(X) void OnStart() { LP("myMessage"); }
Dmitry Fedoseev:
没有办法回答我的问题吗?
你就不能正确使用宏吗?当然,除非你的手掉了两个括号。
我应该阅读有关参数,是的 )
谢谢你!
一般来说,这就是解决的方法。
#define LOG_S(dText) (SLog(__FUNCSIG__,__FILE__,__LINE__,dText)).Log() #define LOG_C(dText) CLog::Get().Log(__FUNCSIG__,__FILE__,__LINE__,dText) #define LOG_F(dText) Log(__FUNCSIG__,__FILE__,__LINE__,dText) struct SLog{ string cText; SLog(string mFunc,string mFile,int mLine,string mText): cText(StringFormat("%s, %s, line %i, %s",mFunc,mFile,mLine,mText)){} void Log() {Print(cText);} }; class CLog{ CLog(){} public: static CLog* Get(){ static CLog instance; return &instance;} void Log(string mFunc,string mFile,int mLine,string mText) {PrintFormat("%s, %s, line %i, %s",mFunc,mFile,mLine,mText);} }; void Log(string mFunc,string mFile,int mLine,string mText) {PrintFormat("%s, %s, line %i, %s",mFunc,mFile,mLine,mText);} void OnStart(void) { LOG_S("struct"); LOG_C("class"); LOG_F("func"); }
三个选项:临时对象、单体、函数--以更有宗教意义的为准)。就速度而言,它们实际上是没有区别的。
#define LOG(dText) printf("%s, %s, line %i, %s",__FUNCSIG__,__FILE__,__LINE__,dText); void OnStart(void){ LOG("bezgovna"); }但不幸的是,你不会给那些傻瓜留下印象。
Dmitry Fedoseev:
但是,不幸的是,你无法打动吸血者。
但是,不幸的是,你无法打动吸血者。
你为什么不直接向那个人展示这个解决方案呢?)
Vladimir Simakov:
你为什么不直接向那个人展示这个解决方案呢?)
谢谢你!)
本质上。
我和同学们在变体处停了下来。即使是像#define参数化这样的基本东西,如果没有日常使用,也会很快被遗忘。
关于神经。
天啊,这里的人都很敏感;你可以问一个没有暗示的问题,没有冒犯或侮辱的意图,但是没有,在一个未被承认的天才的灵魂深处,有一个强烈的欲望,想以牺牲另一个业余爱好者的利益来证明自己。我在英语论坛上没有遇到过这种情况,尽管我经常在那里写作。意识到这一点,我通常尽量不对这种言论作出反应,但如果德米特里,你想在口舌之争中嬉戏,我会给你带来快乐,让你一头扎进你自己的发散中。
大家好!
有什么办法可以从#define中获得一个封闭的括号吗?