向#define专家提问

 

大家好!

有什么办法可以从#define中获得一个封闭的括号吗?

#define  LPE );
#define  LP Print( LPE
void OnStart()
  {
   LP "myMessage"
  }
 
这有什么意义?为了避免写括号?这是个大问题吗?
 
Dmitry Fedoseev:
这有什么意义?那么你就不用写括号 了?这是个大问题吗?


#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,然后在结尾处加一个小括号

 
这有什么意义?那么,你在调用 宏时不必写括号
 
Dmitry Fedoseev:
这有什么意义?所以你在调用 宏时不必写括号

假设我们想在一个宏中添加 __FUNCSIG__ 和 ErrorLast。当宏被调用时,在有其代码的行上会有一个闭合括号。所以,是的,一个念头闪过,有什么办法可以改善这个问题吗?

 
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:
但是,不幸的是,你无法打动吸血者。

你为什么不直接向那个人展示这个解决方案呢?)

UPD: bezgovna - 拼写无sh...t ))))
 
Vladimir Simakov:

你为什么不直接向那个人展示这个解决方案呢?)

UPD: bezgovna - 拼写没有sh...t ))

谢谢你!)

本质上。

我和同学们在变体处停了下来。即使是像#define参数化这样的基本东西,如果没有日常使用,也会很快被遗忘。

关于神经。

天啊,这里的人都很敏感;你可以问一个没有暗示的问题,没有冒犯或侮辱的意图,但是没有,在一个未被承认的天才的灵魂深处,有一个强烈的欲望,想以牺牲另一个业余爱好者的利益来证明自己。我在英语论坛上没有遇到过这种情况,尽管我经常在那里写作。意识到这一点,我通常尽量不对这种言论作出反应,但如果德米特里,你想在口舌之争中嬉戏,我会给你带来快乐,让你一头扎进你自己的发散中。

原因: