Compartir a través de


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:

Vea también

Otros recursos

Propiedades de anotación