====================
== Le blog de dup ==
====================

Pointeurs

devel

J'ai envie d'écrire ce soir... tant pis si je raconte des bêtises...

L'autre soir, pendant les jeudis du libre de l'aldil (qui ont lieu tous les jeudis) j'ai pu discuter avec toady un petit peu. Il m'a dit une chose qui m'a un peu surprise. Il ne supporte pas les "void *" du langage C ! Pourquoi donc ? Parce que ça n'a aucun type alors que justement ça pointe vers quelque chose qui a une structure.

Alors, qu'est-ce qu'un void * ? C'est un pointeur sur rien (void est un mot clé du langage C signifiant "rien"). Autrement dit, c'est une façon de typer une variable qui contient une adresse mémoire. On aurait pu dire aussi un entier [0 ... MAX_MEM](http://blog.delhomme.org/index.php?post/2007/08/07/0 ... MAX_MEM). D'ailleurs, il est tout à fait possible de réaliser des opérations arithmétiques sur un pointeur en C (ce n'est pas forcément le cas dans d'autres langages). Est-ce qu'une zone mémoire possède un type donné ? Non.

Évidemment, pour le programmeur c'est très pénible. Parce qu'il doit faire lui même attention au type de ce qui est renvoyé dans la structure pointée (sinon il lui arrive malheur). C'est encore pénible d'un point de vue sécurité de la programmation, parce qu'on peut facilement faire n'importe quoi. Mais toutefois, c'est d'une souplesse sans égal pour réaliser des structures génériques.

Quand on a goutté à la programmation typée stricte style Pascal (qui a ses avantages) on est comme des fous avec la liberté qu'offre le C et ses amis les void * !!!

Bon, maintenant, admettons que je ne veuille plus utiliser de void * dans mes programmes C. Je n'ai plus qu'a utiliser une superbe astuce (grâce au C) en écrivant*#define pointe_sur_ma_structure void **... (comme dans <bits/typessizes.h> pour __TIMER_T_TYPE) qui a dit que le C c'est pas génial ?