This documentation is archived and is not being maintained.


Each instance of a Pre or Post attribute specifies a set of properties for the annotated parameter or return value at a particular level of dereference. The level of dereference is specified by the Deref property of the attribute, and all properties appearing after a Deref property are applied to that level of dereference. For example, given a parameter p, an attribute with Deref=0 specifies the properties for p, Deref=1 specifies the properties for *p, Deref=2 specifies the properties for **p, and so on. The value of the Deref should be greater than or equal to 0 and less than or equal to 3.


The default value for this property is 0.

For a parameter of reference type, for example, int& r, Deref=0 applies to the reference itself; Deref=1 applies to the referred-to location, which is - the int in this case.

The following code specifies Deref=1, which applies the Access property to the buffer pointed to by the pointer.

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ( [ SA_Pre ( Deref = 1, Access = SA_ReadWrite ) ] char *p );

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f ( [ Pre ( Deref = 1, Access = ReadWrite ) ] char *p );