atributo ref
O atributo [ref] identifica um ponteiro de referência. Ele é usado simplesmente para representar um nível de indireção.
pointer_default(ref)
typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
...}
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
Parâmetros
-
type-attribute-list
-
Especifica um ou mais atributos que se aplicam ao tipo . Os atributos de tipo válidos incluem [handle], [switch_type], [transmit_as]; os atributos de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [context_handle], [cadeia de caracteres] e [ignorar]. Separe vários atributos com vírgulas.
-
type-specifier
-
Especifica um tipo base, struct, união ou tipo de enumeração ou identificador de tipo. Uma especificação de armazenamento opcional pode preceder o especificador de tipo.
-
declarador padrão
-
Especifica um declarador C padrão, como um identificador, um declarador de ponteiro ou um declarador de matriz. Para obter mais informações, consulte Atributos de matriz e Sized-Pointer, matrizes e matrizes e ponteiros.
-
declarator-list
-
Especifica declaradores C padrão, como identificadores, declaradores de ponteiro e declaradores de matriz. Para obter mais informações, consulte Atributos de matriz e Sized-Pointer, matrizes e matrizes e ponteiros. A lista de declaradores consiste em um ou mais declaradores separados por vírgulas. O identificador de nome do parâmetro no declarador de função é opcional.
-
field-attribute-list
-
Especifica zero ou mais atributos de campo que se aplicam ao parâmetro de estrutura, membro da união ou função. Os atributos de campo válidos incluem [first_is], [last_is], [length_is], [max_is], [size_is]; os atributos de uso [cadeiade caracteres], [ignorar]e [context_handle]; o atributo de ponteiro [ref], [unique]ou [ptr]; e o atributo union [switch_type]. Separe vários atributos de campo com vírgulas.
-
function-attribute-list
-
Especifica zero ou mais atributos que se aplicam à função. Os atributos de função válidos são [retorno de chamada], [local]; o atributo de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [cadeiade caracteres], [ignorar]e [context_handle].
-
ptr-decl
-
Especifica pelo menos um declarador de ponteiro ao qual o atributo [ref] se aplica. Um declarador de ponteiro é o mesmo que o declarador de ponteiro usado em C; ele é construído a partir do designador * , modificadores como far e o qualificador const.
-
nome da função
-
Especifica o nome do procedimento remoto.
-
parameter-attribute-list
-
Consiste em zero ou mais atributos apropriados para o tipo de parâmetro especificado. Os atributos de parâmetro podem usar os atributos direcionais [in] e [out]; os atributos de campo [first_is], [last_is], [length_is], [max_is], [size_is]e [switch_type]; o atributo de ponteiro [ref], [unique]ou [ptr]; e os atributos de uso [context_handle] e [cadeia de caracteres]. O atributo de uso [ignorar] não pode ser usado como um atributo de parâmetro. Separe vários atributos com vírgulas.
Comentários
Um atributo de ponteiro pode ser aplicado como um atributo de tipo, como um atributo de campo que se aplica a um membro da estrutura, membro da união ou parâmetro; ou como um atributo de função que se aplica ao tipo de retorno de função. O atributo de ponteiro também pode aparecer com o palavra-chave [pointer_default].
Um ponteiro de referência tem as seguintes características:
- Sempre aponta para um armazenamento válido; nunca tem o valor NULL. Um ponteiro de referência sempre pode ser desreferenciado.
- Nunca é alterado durante uma chamada. Um ponteiro de referência sempre aponta para o mesmo armazenamento no cliente antes e depois da chamada.
- Não aloca nova memória no cliente. Os dados retornados do servidor são gravados no armazenamento existente especificado pelo valor do ponteiro de referência antes da chamada.
- Não causa aliasing. O armazenamento apontado por um ponteiro de referência não pode ser acessado de nenhum outro nome na função.
Um ponteiro de referência não pode ser usado como o tipo de um ponteiro retornado por uma função.
Se nenhum atributo for especificado para um parâmetro de ponteiro de nível superior, ele será tratado como um ponteiro de referência.
Exemplos
[unique] char * GetFirstName(
[in, ref] char * pszFullName);
Confira também