2010-05-07 6 views
4

J'ai un code source d'une bibliothèque qui a beaucoup de macros IF, ELSE, FOR, etc. étranges pour tous les C-keywords communs au lieu d'utiliser juste habituel si, sinon, pour, tandis que les mots-clés. Ces macros sont définies comme suit:Objectif des macros IF, ELSE, FOR?

#define IF(a) if(increment_if(), a) 

où la fonction increment_if() est définie de façon:

static __inline void increment_if(void) { 
    // If the "IF" operator comes just after an "ELSE", its counter 
    // must not be incremented. 
    ... //implementation 
} 

Je ne comprends pas vraiment, quel est le but de ces macros? Cette bibliothèque est pour une application en temps réel et je suppose que l'utilisation de telles macros doit ralentir une application.

Répondre

10

Ces macros auront deux versions, l'une qui est simplement l'instruction simple if, et l'autre qui compte le nombre d'exécutions de cette instruction. La raison de faire cela est de faire les statistiques de profilage. Si vous comptez le nombre d'exécutions de chaque bloc de code, vous pouvez comptabiliser le temps que chacun prend.

Dans une application en temps réel, il est beaucoup plus important que le timing de chaque opération soit prévisible afin de pouvoir calculer si l'application respecte ses délais. Il ne suffit pas simplement d'être rapide, en fait, tant que les délais sont respectés, c'est tout ce qui est requis.