Qual é o objetivo? Então você não tem que escrever parênteses? É um grande problema?
#define LPRINT_END , __FUNCSIG__); #define LPRINT gFactory.getCLogManager().doPrint (
e no meio está uma mensagem de log
LPRINT "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG
sem o fechamento.
LPRINT (FUNCSIG, "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG);
ou o início (FUNCSIG para #define e depois um parêntese no final
digamos que queremos adicionar __FUNÇÕES__ e ErroÚltimo a uma macro. Quando a macro é chamada, haverá um parêntese de fechamento na linha com seu código. Então, sim, um pensamento que se espalhou, há alguma maneira de melhorar isso?
digamos que queremos adicionar __FUNÇÕES__ e ErroÚltimo a uma macro. Quando a macro é chamada, haverá um parêntese de fechamento na linha com seu código. Então, sim, um pensamento que piscou, há alguma maneira de melhorar isso?
Não há maneira de responder à minha pergunta?
Talvez apenas usar macros normalmente? A menos, é claro, que suas mãos caiam de dois parênteses.
#define LP(X) Print(X) void OnStart() { LP("myMessage"); }
Não há maneira de responder à minha pergunta?
Você não pode simplesmente usar as macros corretamente? A menos, é claro, que suas mãos caiam de dois parênteses.
Eu deveria ter lido sobre parâmetros, sim )
Obrigado!
Em geral, é assim que é resolvido:
#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"); }
Três opções: objeto temporário, monótono, função - o que for mais religioso). Em termos de velocidade, eles são praticamente indistinguíveis.
#define LOG(dText) printf("%s, %s, line %i, %s",__FUNCSIG__,__FILE__,__LINE__,dText); void OnStart(void){ LOG("bezgovna"); }Mas infelizmente, você não vai impressionar os otários.
Mas, infelizmente, você não impressiona os otários.
Por que você não mostrou logo essa solução ao homem?)
Por que você não mostrou logo essa solução ao homem?)
Obrigado! )
Essencialmente.
Eu parei na variante com a classe. Mesmo coisas tão elementares como #define parametrização são rapidamente esquecidas sem uso diário.
Com os nervos em franja.
Deus, como todo mundo é sensível aqui; você pode fazer uma pergunta sem implicação, sem a intenção de ofender ou insultar, mas não, em algum lugar na alma de um gênio não reconhecido você tem um incômodo e um desejo de se afirmar às custas de mais um amador. Não o encontro no fórum inglês, embora eu escreva lá regularmente. Percebendo isto, eu geralmente tento não reagir a tais observações, mas se Dmitry, você quiser brincar em uma batalha verbal, eu lhe darei prazer mergulhando-o de cabeça em suas próprias emanações.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá a todos!
Existe alguma forma de obter um suporte de fechamento a partir de #define?