Next: Langage Synopsis Up: Objective C Previous: Manipuler la structure de

Codage des types

Pour simplifier les outils du noyau d'exécution le compilateur encode le type de la valeur de retour et des arguments de chaque méthode dans une chaîne associée au sélecteur de la méthode. Ce système de codage des types peut être utilisé dans d'autres contextes et est rendu publique par la directive de compilation @encode(). Cette directive transforme une spécification de type en une chaîne représentant ce type. Le type peut-être un type de base, un pointeur une structure une union ou un nom de classe tous ce qui peut être tulisé comme argument de l'opérateur sizeof() du C. char *buf1 = @encode(int **);
char *buf2 = @encode(struct key);
char *buf3 = @encode(Matrix);
La Table sur la page suivante les codes des types. Notez que beaucoup de ces codes sont identique a ceux utilisés pour les entrées sorties formattées. Attention ces codes ne peuvent être utilisés pour les entrée/sorties formattées.

Code Meaning
c A char, caractères
i An int, entiers
s A short, entier cours
l A long, entier long
C An unsigned char, caractère non signé
I An unsigned int, entier non signé
S An unsigned short, entier court non signé
L An unsigned long, enteir long non signé
f A float, réel
d A double, réel double précision
v A void
* A character string (char *), pointeur sur char
@ An id
# A class object (Class), un objet de typoe class
: A method selector (SEL), un sélecteur de méthode


An array, un tableau
{...} A structure, une structure
(...) A union, une union
bnum A bitfield of num bits, un champs de bit de num bits
^type A pointer to type, un pointeur sur type
? An unknown type, un type inconnu

Pour une tableau le nombre d'élements du tableau est indiqué juste après le crochet ouvrant et le type des élménts en suite. Un tableau de douze pointeurs sur float est encodé par:



Les structures sont indiquées par des accollades, on indique le nom de la structure après l'accolade puis les types des champs dans l'ordre. Par exemple la structure:

typedef struct exemple {
id unObjet;
char *unechaine;
int unEntier;
} Exemple;
sera encodé par:
{example=@*i}
Le même encodage est optenu en utilisant comme paramètre de encode le nom du type (Exemple) ou le nom de la structure (exemple). Un pointeur sur une structure contient autant d'informations:

^ {example=@*i}
mais un niveau d'indirection de plus fait disparaitre les spécification internes:

^^{example}
Les objets sont traités comme des structures. Par exemple l'objet class Object est encodé :

{Object=#}
c'est à dire que c'est une instance de la classe Class de nom Objet.

Next: Langage Synopsis Up: Objective C Previous: Manipuler la structure de

Dominique REVUZ
Vendredi 21 février 1997 17:27:12
Une Bug Un mail Merci