J'ai récemment pris en charge une petite application MCF C++, qui est évidemment en état de marche. Pour commencer, je lance PC-Lint sur le code, et lint se plaint que CStringT sont passés au format. L'opinion sur internet semble être divisée. Certains disent que CSting est conçu pour gérer ce cas d'utilisation sans erreur, mais d'autres (et un MSDN article) dit qu'il devrait toujours être cast lorsqu'il est passé à une fonction d'argument variable.) Stackoverflow peut-il arriver à un consensus sur le problème?Devrais-je lancer un CString passé à Format/printf (et varargs en général)?
1
A
Répondre
3
CString a été soigneusement conçu pour être transmis dans le cadre d'une liste d'arguments variables, donc il est sûr de l'utiliser de cette façon.Et vous pouvez être sûr que Microsoft fera attention à ne pas briser ce comportement particulier.Par conséquent, je dirais que vous êtes Cela dit, personnellement, je préférerais la distribution: il n'est pas courant que les classes de chaînes se comportent de la sorte (par exemple, std :: string ne l'est pas) et consistance mentale, il peut être préférable de le faire de manière "sûre"
P.S .: Voir ce thread pour les détails de mise en œuvre et d'autres notes sur la façon de lancer.