Une macro surlignée en tant que mot clé: pascal

En cherchant dans l’exemple de code pour FunkyOverlayWindow , je viens de trouver une déclaration assez intéressante:

pascal OSStatus MyHotKeyHandler( EventHandlerCallRef nextHandler, EventRef theEvent, void *userData ); 

Ici, pascal est surligné en tant que mot clé (rose dans le jeu de couleurs Xcode standard). Mais je viens de trouver que c’est une macro, assez intéressante, définie dans le fichier CarbonCore / ConditionalMacros.h comme:

 #define pascal 

Alors, qu’est-ce (ou était-il) censé faire? Peut-être qu’il avait une utilisation spéciale dans le passé?

Bien que cette discussion puisse ne pas convenir ici, il serait intéressant de savoir pourquoi Apple utilise toujours Carbon si cela se rapporte à la réponse. Je n’ai aucune expérience de Carbon, mais ce code semble définir un gestionnaire d’événement de clavier, ce qui me fait me demander s’il y a des avantages par rapport à l’approche Cocoa. Carbon ne sera-t-il jamais enlevé complètement?

Dans l’environnement d’exécution Mac OS classique 68k (par exemple, avant PowerPC ou x86), C et Pascal utilisaient des conventions d’appel différentes. Les applications C devaient donc déclarer la convention appropriée lors de l’appel de bibliothèques utilisant les conventions Pascal (y compris la plupart des systèmes d’exploitation). La macro a été implémentée dans des compilateurs contemporains (par exemple, MPW, Metrowerks, Think C).

Dans toutes les exécutions plus récentes et dans tous les compilateurs modernes, le mot clé n’est plus reconnu. ConditionalMacros.h tête ConditionalMacros.h définit par conséquent. Il y a quelques commentaires dans ce fichier qui peuvent aider à expliquer un peu plus – lisez-le, si vous êtes en train de jouer.

Vous avez rencontré une convention d’appel .

La convention d’appel pascal pour le x86 est décrite ici .

Il est très intéressant qu’il ait été défini loin de rien, ce qui signifie que vous ne l’utilisez plus. C’était courant à l’époque x86, en particulier dans les API Microsoft Windows, à cause de la capacité du processeur à supprimer des parameters de la stack à la fin d’un appel avec son instruction RET n spéciale. Les fonctions utilisant la convention d’appel pascal étaient parfois avantageuses, car l’appelant n’a pas explicitement ajusté le pointeur de stack après chaque appel renvoyé.

Si une personne mieux informée des raisons pour lesquelles la macro existe toujours dans la base de code, mais qu’elle est définie plus loin, vous apporte une meilleure réponse, je retirerai celle-ci avec plaisir.