Question

J'essaie d'utiliser l'annotation SAL de Micosoft pour mon projet. Toutefois, je reçois l'avertissement suivant et je ne sais pas pourquoi.

Par exemple, j'ai créé une nouvelle application console C ++ et j'ai le code suivant:

#include <sal.h>

class Whatever
{
public:
    _Check_return_ int Method(__in int number) ;
};

int main()
{
    return 0;
}

Lorsque je compile avec Visual Studio 2008, l'avertissement suivant s'affiche:

avertissement C6540: l'utilisation d'annotations d'attributs sur cette fonction invalidera toutes ses annotations __declspec existantes

Dans le fichier " c1xxast "

Qu'est-ce que je fais mal? Si je supprime le _Check_return_ ou le __in, l'avertissement disparaît.

Je ne trouve aucune référence à l'avertissement C6550. Cependant, le même texte peut être trouvé ici: http://msdn.microsoft.com /en-us/library/dd445322.aspx , mais ce n'est pas très utile.

Était-ce utile?

La solution

Le problème peut être dû au fait que vous mélangez des types d'annotation SAL. Bien que très clair sur MSDN, il existe deux types d’annotation SAL: attribut et ... euh ... non.

Les #define dans <sal.h> VC2005 utilisent les versions non attributaires et commencent par un trait de soulignement suivi d'une lettre minuscule . Les nouvelles versions de VC2008 développent les attributs du compilateur et commencent (et finissent) par un trait de soulignement suivi d'une lettre majuscule .

Vous avez mélangé les deux types:

Attribut:

  • _In _
  • _Check_return _

Non-attribut:

  • __ dans
  • __ checkReturn

Essayez de modifier vos annotations pour utiliser un seul type de manière cohérente.

Ce billet de blog explique un peu plus à ce sujet.

Autres conseils

Vous devez ajouter des annotations SAL à la déclaration et à la définition d'une méthode. Je suppose que SAL est fâché parce qu'il ne peut pas trouver la définition de la méthode et suppose que les attributs sont manquants.

EDIT Clarification

Les annulations SAL doivent apparaître aux deux emplacements pour les méthodes non abstraites. Pour les méthodes abstraites, SAL ne cherchera pas de définition. Dans certaines configurations, cela garantira que l'implémentation de l'interface possède les notations appropriées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top