2011-04-06 2 views
2

bonjour tout le monde je l'ai trouvé cette fonction dans le noyau de Linux:changement de contexte dans Linux

inline task_t *context_switch(task_t *prev, task_t *next) { 
... 

switch_to(prev, next, prev); 
return prev; 
} 

cette fonction fait changement de contexte, ma question est pourquoi cette fonction devrait être en ligne et non macro par exemple, grâce à avance ...

Répondre

4

Ce n'est peut-être pas une macro car une macro pour cela évalue prev et deux fois chacune, alors qu'il peut s'agir d'expressions avec des effets secondaires. En outre, après quelques recherches, j'ai trouvé que switch_to est (sur certaines plateformes) une macro qui est une instruction entre accolades, et ne peut donc pas retourner une valeur à utiliser dans une expression.

Je trouve une partie de cette information ici: https://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:task_switching

2

Les macros sont un moyen de rendre les fonctions inline, lorsque votre compilateur C ne fait pas les fonctions inline. Une macro, contrairement aux fonctions en ligne, n'effectuera pas la vérification des paramètres de compilation. Donc, la fonction inline est mieux pour la maintenance.

Questions connexes