C6507
Actualización: noviembre 2007
C6507
Advertencia C6507: Conflicto de anotación: la propiedad 'Null' de Deref=0 en una condición posterior debe ser un subconjunto de la propiedad Null en la condición previa
Esta advertencia indica que se han utilizado valores que están en conflicto para la propiedad Null en las condiciones Pre y Post en el nivel 0 de eliminación de referencias predeterminado. En este caso, la condición Pre especifica Null=No, y la condición Post especifica Null=Yes. Dado que el parámetro no se pasa mediante referencia, no se puede cambiar; por consiguiente, la condición Post no puede utilizar Null=Yes.
Ejemplo
El código siguiente genera esta advertencia porque se aplica Deref=0 al puntero y no el puntero al carácter:
// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ([SA_Pre(Null=SA_No)] [SA_Post(Null=SA_Yes)] char *pc);
// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f([Pre(Null=No)] [Post(Null=Yes)] char *pc);
Para corregir esta advertencia, modifique el atributo Pre o utilice un direccionamiento indirecto doble si desea cambiar el puntero que señala a los caracteres, como se muestra en el código siguiente:
// C
#include <CodeAnalysis\SourceAnnotations.h>
void f1 ([SA_Pre(Null=SA_Maybe)] [SA_Post(Null=SA_Yes)] char *pc);
// or
void f2 ([SA_Pre(Deref=1, Null=SA_No)] [SA_Post(Null=SA_Yes)] char **pc);
// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f1([Pre(Null=Maybe)] [Post(Null=Yes)] char *pc);
// or
void f2 ([Pre(Deref=1, Null=No)] [Post(Null=Yes)] char **pc);
Es válido especificar Pre (Null=Maybe) y Post (Null=No). Resulta de gran utilidad para funciones que podrían iniciar excepciones si el puntero es null: