OF macro dans iowin32.h

Je ne comprends pas la ligne suivante de iowin32.h de minizip:

void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); 

( Source , obsolète mais toujours d’actualité)

Que fait la macro OF ?

Le nom OF peut être une abréviation de la Old function declaration de l’ Old function declaration .

Dans les temps anciens des années 80 et même avant, une déclaration typique de cette fonction ressemblait à ceci:

 fill_win32_filefunc(); 

C’est tout. Aucun type de retour explicite, aucun paramètre déclaré. Le type de retour est int par défaut et les parameters importent peu, car l’appelant transmettra (espérons-le) les valeurs des bons types de données.

Les versions ultérieures ont introduit le type void , ainsi la déclaration pourrait ressembler à ceci:

 void fill_win32_filefunc(); 

Et quand ANSI C89 est sorti, il a introduit la déclaration des parameters de fonction. Maintenant, une bonne déclaration ressemblait à ceci:

 void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def); 

Au début de 1989, beaucoup de code devait combiner les deux styles. C’est pourquoi une macro OF (ou parfois _P ou d’un autre nom) a été inventée. Sa définition est généralement:

 #if PRE_ANSI_C89 # define OF(args) () #else # define OF(args) args #endif 

À partir de cela, les deux versions sont générées facilement.

De nos jours, ce hack n’est plus nécessaire, sauf pour les très vieux compilateurs.