Comment dois-je utiliser correctement __attribute__ ((format (printf, x, y))) dans une méthode de classe en C ++?
Je suis en train de définir une méthode de classe pour déboguer des impressions qui se comportent comme des printf
:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 1, 2)))
Ce dont il se plaint:
error: format string argument not a string type
J'ai rappelé qu'une méthode de la classe de déclaration implicite this
paramètre, donc j'ai changé l'emplacement des paramètres à 2, 3:
inline void debug(const char* fmt, ...) __attribute__ ((format (printf, 2, 3)))
et maintenant, il compile, mais il semble que les paramètres sont décalées, comme si le this
paramètre ont été traités comme faisant partie de la liste d'arguments.
Comment puis-je déterminer la fonction qui this
ne fait pas partie de la chaîne que je veux imprimer?
source d'informationauteur Nathan Fellman
Vous devez vous connecter pour publier un commentaire.
Vous l'avez fait.
this
est l'argument 1, donc en disantformat(printf, 2, 3)
vous avez dit au compilateur que vous n'êtes PAS l'impressionthis
vous avez l'impression de l'argument 2 (fmt
) avec des arguments supplémentaires.Depuis il ne fonctionne que pour gcc, il serait bon de définir de cette façon pour éviter les erreurs sur d'autres compilateurs.
Traiter les membres statiques de même que les non-membres. La discussion m'a donné la réponse, mais il est intéressant de noter pour les autres:
J'ai trouvé ce parce que nous avons quelques procédés que l'utilisation du journal des aides de ce genre et de 1 sur 4 a été exigeant
__attribute__ (( format( printf, 2, 3 ) ))
avec les trois autres de travailler avec les__attribute__ (( format(printf, 1, 2) ))
- s'est avéré qu'il était non-statique...