J'ai vu cette macro définie auparavant mais je n'ai jamais vraiment connu son but. Quelqu'un peut-il faire la lumière sur cette question?Fonction de _never_executed()?
Répondre
Ceci est un compilateur intrinsèque utilisé pour l'optimisation, généralement vu dans la programmation intégrée. La seule fois que je l'ai vu utilisé dans le "défaut" pour une déclaration de commutateur pour affirmer que la variable a une portée limitée (pour une meilleure optimisation). Exemple:
/* Get DTMF index */
switch(dtmf)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
/* Handle numeric DTMF */
index = dtmf - '0';
break;
case 'A':
case 'B':
case 'C':
case 'D':
index = dtmf - 'A' + 10;
break:
default:
_never_executed();
break;
}
probablement ne fonctionne pas avec tous les compilateurs ...
J'ai déjà vu des choses comme ça dans le cadre de tests. Si est exécuté, alors vous savez que vous avez un bug.
Je ne l'ai jamais vu auparavant, mais STFW avec Google propose d'abord cette question, puis d'autres références. De ce qu'il dit, il est clair que le compilateur sait que le code n'est jamais exécuté - donc le compilateur peut faire l'optimisation. Il pourrait légitimement être considéré comme une excuse pour mettre 'assert (0)' à sa place - puisque le code ne sera jamais exécuté, l'assertion ne se déclenchera jamais. Bien sûr, si l'assertion prend feu, alors vous savez que vous avez un problème.
Voir aussi le papier classique "Can't Happen or /* NOTREACHED */ or Real Programs Dump Core".
Cela vaut la peine d'être lu, même maintenant.
En tant que votre information, MSVC a quelque chose de similaire (avec un peu plus de flexibilité), la __assume()
intrinsèque. Un exemple qu'ils donnent:
int main(int p)
{
switch(p){
case 1:
func1(1);
break;
case 2:
func1(-1);
break;
default:
__assume(0);
// This tells the optimizer that the default
// cannot be reached. As so, it does not have to generate
// the extra code to check that 'p' has a value
// not represented by a case arm. This makes the switch
// run faster.
}
}
Je ne sais pas quelle version de MSVC a été prise en charge pour la première fois.
- 1. Obtenir appel nom de la fonction de fonction appelée
- 2. Extraction de PHP() Fonction
- 3. Extraction de fonction audio
- 4. Fonction de hachage procédural
- 5. fonction de courrier électronique
- 6. Fonction de rappel slideToggle
- 7. string.replace bug de fonction?
- 8. Fonction de rappel
- 9. Liaison de fonction Jquery
- 10. Fonction JavaScript de PHP
- 11. Fonction RowDataBound de GridView
- 12. fonction
- 13. Définition de pointeurs de fonction
- 14. Fonction de dissection de Wireshark
- 15. Problème de moquerie, fonction publique appelant fonction privée
- 16. Comment puis-je appeler Jquery Fonction De Autre fonction JavaScript
- 17. Appel de la fonction jQuery avec la fonction Javascript
- 18. appelant une fonction javascript (dans la fonction d'origine) de la fonction appelée?
- 19. jQuery slideToggle() fonction de rappel
- 20. Fonction de débogage VSTS 2010
- 21. GMarker avec fonction de zoom
- 22. Remplacer les unités de fonction
- 23. Portée de jQuery each() fonction?
- 24. Pointeur de fonction dans C
- 25. Appel fonction C++ de C#
- 26. Appel de fonction virtuel pur
- 27. Fonction de signe opposé maths?
- 28. jquery fonction de la charge
- 29. farbtastic Fonction de rappel PlugIn
- 30. C#: Enfilez fonction de sécurité
Pouvez-vous trouver comment il est défini et ajouter à cette question? –