J'ai vu des impressions de débogage dans glibc qui, en interne, est défini comme suit (void) 0
si NDEBUG est définie. De même, le __noop
pour le compilateur Visual C++ est là aussi. Le premier fonctionne à la fois sur les compilateurs GCC et VC++, tandis que le second ne fonctionne que sur VC++. Maintenant, nous savons tous que les deux déclarations ci-dessus seront traitées comme une absence d'opération et aucun code respectif ne sera généré ; mais voici où j'ai un doute.
En cas de __noop
MSDN dit que c'est une fonction intrinsèque fournie par le compilateur. Venant à (void) 0
~ Pourquoi est-il interprété par les compilateurs comme un no op ? Est-ce une utilisation délicate du langage C ou la norme dit-elle quelque chose à ce sujet explicitement ? Ou même que c'est quelque chose à faire avec l'implémentation du compilateur ?