Quel est l'intérêt ? Pour ne pas avoir à écrire des parenthèses? Est-ce un gros problème ?
#define LPRINT_END , __FUNCSIG__); #define LPRINT gFactory.getCLogManager().doPrint (
et au milieu se trouve un message de journal
LPRINT "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG
sans la fermeture.
LPRINT (FUNCSIG, "abnormal situation, couldn't select position", ENUM_LOG_LEAD_DEBUG);
soit le début (FUNCSIG à #define et ensuite une parenthèse à la fin
Quel est l'intérêt ? Il n'est donc pas nécessaire d'écrire des parenthèses lors de l'appel de la macro ?
Disons que nous voulons ajouter __FUNCSIG__ et ErrorLast à une macro. Lorsque la macro est appelée, il y aura une parenthèse fermante sur la ligne contenant son code. Alors, oui, une pensée a germé, y a-t-il un moyen d'améliorer cela ?
disons que nous voulons ajouter __FUNCSIG__ et ErrorLast à une macro. Lorsque la macro est appelée, il y aura une parenthèse fermante sur la ligne contenant son code. Alors, oui, une idée a germé, y a-t-il un moyen d'améliorer cela ?
N'y a-t-il aucun moyen de répondre à ma question ?
Peut-être qu'il suffit d'utiliser les macros normalement ? Sauf, bien sûr, si vos mains tombent de deux parenthèses.
#define LP(X) Print(X) void OnStart() { LP("myMessage"); }
N'y a-t-il aucun moyen de répondre à ma question ?
Tu ne peux pas utiliser les macros correctement ? Sauf, bien sûr, si vos mains tombent de deux parenthèses.
J'aurais dû me renseigner sur les paramètres, oui )
Merci !
En général, c'est ainsi que le problème est résolu :
#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"); }
Trois options : objet temporaire, singletone, fonction - celle qui est la plus religieuse). En termes de vitesse, ils sont pratiquement indiscernables.
#define LOG(dText) printf("%s, %s, line %i, %s",__FUNCSIG__,__FILE__,__LINE__,dText); void OnStart(void){ LOG("bezgovna"); }Mais malheureusement, vous n'impressionnerez pas les pigeons.
Mais, malheureusement, on n'impressionne pas les nuls.
Pourquoi n'avez-vous pas montré cette solution à l'homme tout de suite) ?
Pourquoi n'avez-vous pas montré cette solution à l'homme tout de suite) ?
Merci ! )
Essentiellement.
Je me suis arrêté à la variante avec la classe. Même des choses aussi élémentaires que la paramétrisation #define sont rapidement oubliées sans une utilisation quotidienne.
Sur les nerfs.
Mon Dieu, comme tout le monde est sensible ici ; on peut poser une question sans sous-entendu, sans intention d'offenser ou d'insulter, mais non, quelque part dans l'âme d'un génie méconnu, il y a un agacement et un désir de s'affirmer aux dépens d'un autre amateur. Je ne le rencontre pas sur le forum anglais, bien que j'y écrive régulièrement. Conscient de cela, j'essaie généralement de ne pas réagir à de telles remarques, mais si Dmitry, vous voulez vous ébattre dans une bataille verbale, je vous ferai le plaisir de vous plonger la tête la première dans vos propres émanations.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Bonjour à tous !
Y a-t-il un moyen d'obtenir un crochet fermant à partir de #define ?