Compartilhar via


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

Matrizes

Matrizes e ponteiros

Atributos de matriz e Sized-Pointer

Tipos base MIDL

retorno de chamada

const

context_handle

Enum

first_is

Identificador

Ignorar

last_is

length_is

Local

max_is

out

Ptr

size_is

string

Struct

switch_type

transmit_as

union

unique