ref-Attribut
Das [ ref-Attribut ] identifiziert einen Verweiszeiger. Es wird einfach verwendet, um eine Deskriptionsebene zu darstellen.
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]]
, ...);
Parameter
-
type-attribute-list
-
Gibt ein oder mehrere Attribute an, die für den Typ gelten. Gültige Typattribute sind handle, switch type , transmit as , die Zeigerattribute [ ] [ _ ] [ _ ] [ ] ref, [ uniqueoder ] [ ptr ] und [ _ ] [ ] [ ] die Kontexthand handle für die Verwendungsattribute , string und ignorieren . Trennen Sie mehrere Attribute durch Kommas.
-
Typspezifizierer
-
Gibt einen Basistyp, eine Struktur,eine Unionoder einen enum-Typ oder Typbezeichner an. Eine optionale Speicherspezifikation kann dem Typspezifizierer vorangestellt werden.
-
Standarddeklarator
-
Gibt einen C-Standarddeklarator an, z. B. einen Bezeichner, einen Zeigerdeklarator oder einen Arraydeklarator. Weitere Informationen finden Sie unter Array- und Sized-Pointer Attribute, Arraysund Arrays und Zeiger.
-
declarator-list
-
Gibt C-Standarddeklaratoren an, z. B. Bezeichner, Zeigerdeklaratoren und Arraydeklaratoren. Weitere Informationen finden Sie unter Array- und Sized-Pointer Attribute, Arraysund Arrays und Zeiger. Die Declaratorliste besteht aus einem oder mehreren Deklaratoren, die durch Kommas getrennt sind. Der Parameternamenbezeichner im Funktionsdeklarator ist optional.
-
Feldattributliste
-
Gibt null oder mehr Feldattribute an, die für die Struktur, den Union-Member oder den Funktionsparameter gelten. Zu den gültigen Feldattributen zählen zuerst ist , last ist , length ist , max ist , size ist ; die Verwendungsattribute string , ignore und context [ _handle; das ] [ _ ] [ _ ] [ _ ] [ _ ] [ ] [ ] [ _ ] Zeigerattribut [ ref, ] [ unique ] oder [ ptrund der ] Union-Attributschaltertyp [ _ ] . Trennen Sie mehrere Feldattribute durch Kommas.
-
function-attribute-list
-
Gibt null oder mehr Attribute an, die für die Funktion gelten. Gültige Funktionsattribute sind [ rückruf, local, das ] [ ] Zeigerattribut [ ref, ] [ uniqueoder ptr und die ] [ ] Verwendungsattribute Zeichenfolge [ ] , [ ignorieren ] und [ _ Kontexthand handle ] .
-
ptr-decl
-
Gibt mindestens einen Zeigerdeklarator an, für den das [ ref-Attribut ] gilt. Ein Zeigerdeklarator ist mit dem in C verwendeten Zeigerdeklarator identisch. sie wird aus dem * Designator, Modifizierern wie far und dem Qualifizierer const erstellt.
-
Funktionsname
-
Gibt den Namen der Remoteprozedur an.
-
parameter-attribute-list
-
Besteht aus 0 (null) oder mehr Attributen, die für den angegebenen Parametertyp geeignet sind. Parameterattribute können die direktionalen Attribute in und aus nehmen. Die Feldattribute sind zuerst , last ist , length ist , max ist , size ist , und switch type, das Zeigerattribut [ ] [ ] [ _ ] [ _ ] [ _ ] [ _ ] [ _ ] [ _ ] [ ref, ] [ uniqueoder ptr ] [ sowie ] [ _ ] [ ] das Kontexthand handle und die Zeichenfolge der Verwendungsattribute. Das ignorierte [ Verwendungsattribut ] kann nicht als Parameterattribut verwendet werden. Trennen Sie mehrere Attribute durch Kommas.
Bemerkungen
Ein Zeigerattribut kann als Typattribut als Feldattribut angewendet werden, das für einen Struktur member, union member oder parameter gilt. oder als Funktionsattribut, das für den Funktions-Rückgabetyp gilt. Das Zeigerattribut kann auch mit dem [ Zeiger-Standardschlüsselwort _ angezeigt ] werden.
Ein Verweiszeiger hat die folgenden Merkmale:
- Verweist immer auf gültigen Speicher. hat nie den Wert NULL. Ein Verweiszeiger kann immer dereferenziert werden.
- Ändert sich während eines Aufrufs nie. Ein Verweiszeiger zeigt vor und nach dem Aufruf immer auf denselben Speicher auf dem Client.
- Weist auf dem Client keinen neuen Arbeitsspeicher zu. Vom Server zurückgegebene Daten werden in vorhandenen Speicher geschrieben, der durch den Wert des Verweiszeigers vor dem Aufruf angegeben wird.
- Verursacht kein Aliasing. Storage, auf die ein Verweiszeiger zeigt, kann von einem anderen Namen in der Funktion nicht erreicht werden.
Ein Verweiszeiger kann nicht als Typ eines Zeigers verwendet werden, der von einer Funktion zurückgegeben wird.
Wenn für einen Zeigerparameter der obersten Ebene kein Attribut angegeben wird, wird es als Verweiszeiger behandelt.
Beispiele
[unique] char * GetFirstName(
[in, ref] char * pszFullName);