pregunta para los expertos en #define
¿Qué sentido tiene? ¿Así que no tienes que escribir paréntesis? ¿Es un gran problema?
#define LPRINT_END , __FUNCSIG__); #define LPRINT gFactory.getCLogManager().doPrint (
y en el medio hay un mensaje de registro
LPRINT "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG
sin el cierre.
LPRINT (FUNCSIG, "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG);
o bien al principio (FUNCSIG a #define y luego un paréntesis al final
¿Qué sentido tiene? Entonces, ¿no hay que escribir paréntesis cuando se llama a una macro?
Digamos que queremos añadir __FUNCSIG__ y ErrorLast a una macro. Cuando se llame a la macro, habrá un paréntesis de cierre en la línea con su código. Así que, sí, un pensamiento se me pasó por la cabeza, ¿hay alguna manera de que esto se pueda mejorar
Digamos que queremos añadir __FUNCSIG__ y ErrorLast a una macro. Cuando se llame a la macro, habrá un paréntesis de cierre en la línea con su código. Así que, sí, un pensamiento se me pasó por la cabeza, ¿hay alguna manera de que esto se pueda mejorar
¿No hay manera de responder a mi pregunta?
¿Tal vez sólo utilizar las macros normalmente? A menos, claro, que se te caigan las manos de dos paréntesis.
#define LP(X) Print(X) void OnStart() { LP("myMessage"); }
¿No hay manera de responder a mi pregunta?
¿No puedes utilizar las macros correctamente? A menos, claro, que se te caigan las manos de dos paréntesis.
Debería haber leído sobre los parámetros, sí )
Gracias.
En general, así es como se resuelve:
#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"); }
Tres opciones: objeto temporal, monotributo, función, la que sea más religiosa). En términos de velocidad, son prácticamente indistinguibles.
#define LOG(dText) printf("%s, %s, line %i, %s",__FUNCSIG__,__FILE__,__LINE__,dText); void OnStart(void){ LOG("bezgovna"); }Pero, por desgracia, no impresionarás a los tontos.
Pero, desgraciadamente, no se impresiona a los tontos.
¿Por qué no le mostró esta solución al hombre de inmediato?)
¿Por qué no le mostró esta solución al hombre de inmediato?)
Gracias. )
Esencialmente.
Me detuve en la variante con la clase. Incluso cosas tan elementales como la parametrización #define se olvidan rápidamente sin el uso diario.
Sobre los nervios.
Dios, qué sensible es todo el mundo aquí; se puede hacer una pregunta sin implicación, sin intención de ofender o insultar, pero no, en algún lugar del alma de un genio no reconocido hay un deseo ardiente de hacerse valer a costa de otro aficionado. No lo encuentro en el foro de inglés, aunque escribo allí regularmente. Al darme cuenta de ello, suelo intentar no reaccionar ante tales comentarios, pero si Dmitry, quieres retozar en una batalla verbal, te daré el placer de sumergirte de cabeza en tus propias emanaciones.

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola a todos.
¿Hay alguna manera de obtener un corchete de cierre de #define?