Vous pouvez parfois voir un code comme celui-ci juste pour servir d'emplacement d'ancrage pour mettre un point d'arrêt dans un débogueur interactif afin de piéger certaines conditions "inhabituelles" (le plus souvent - erronées).
Les points d'arrêt conditionnels fournis par le débogueur sont généralement très lents et/ou primitifs. Les personnes planifient donc délibérément à l'avance et fournissent de telles branches conditionnelles afin de créer un emplacement compilé pour un point d'arrêt. Un tel point d'arrêt conditionnel compilé ne ralentit pas l'exécution du programme presque autant qu'un point d'arrêt conditionnel fourni par le débogueur le ferait.
Dans de nombreux cas, ce code est entouré de #ifndef NDEBUG/#endif
pour l'empêcher d'entrer dans les générations de production. Dans d'autres cas, les gens la laissent sans protection, croyant que l'optimisation du compilateur l'enlèvera de toute façon.
Pour que cela fonctionne, le code sous if
devrait générer du code machine dans les versions de débogage. Sinon, il serait impossible de mettre un point d'arrêt dessus. Différentes personnes ont des préférences différentes à cet égard, mais le code a toujours l'air bizarre et vide de sens.
C'est l'absence de sens de ce code qui offre aux programmeurs une liberté totale d'écrire tout ce qu'ils veulent. Et je dirais que cela fait souvent partie du style de signature de chaque programmeur, une sorte d'empreinte digitale. Le gars en question fait int esko = esko = 2;
, apparemment.
Pour ce que ça vaut, je suis à peu près sûr qu'il s'agit d'un no-op complet (enfin, sauf si 'StaticAnimatedEntities' est une instance d'une classe surchargée' operator! ') –
Probablement juste copier et coller les ordures. –
Comment une question peut être simultanément C++ et agnostique? :-) – Michael