3 votes

optimisations de gcc

J'aimerais savoir si le morceau de code suivant va générer une erreur ou un avertissement lors de la compilation avec n'importe quel type d'optimisations gcc/g++ activées.

int a;
a = func();
if (a == 2) {
    assert(false);
}

Je pense que le code suivant peut générer un avertissement "variable définie mais inutilisée", dans la configuration de la version.

int a;
a = func();
assert(a != 2);

Mais qu'en est-il du code ci-dessus ? (gcc peut supprimer l'instruction if elle-même parce que rien ne sera fait ni dans l'instruction if ni dans le bloc if (dans la version release), et lancer un avertissement "variable inutilisée mais définie" )

edit : ce n'est absolument pas une question concernant la réduction de la taille du code ou de l'exe. Je veux connaître un morceau de code qui réussit dans n'importe quelle configuration de construction.

edit : nous désactivons assert en mode release

0voto

Omnifarious Points 25666

Oui, il se peut que ce code émette des avertissements en raison d'un réglage étrange du compilateur à un moment donné dans l'avenir.

Votre question ne recevra jamais de réponse positive. C'est impossible. L'avenir est imprévisible. Et même dans le présent, le nombre de drapeaux de compilateur représente une explosion combinatoire qu'il peut être très difficile d'analyser complètement. Tous ceux qui vous ont répondu par l'affirmative ont probablement oublié quelque chose.

Je précise que le compilateur n'émet généralement (d'après mon expérience) que des avertissements concernant l'aspect réel de votre code, et non l'aspect qu'il aura une fois que l'optimiseur en aura terminé avec lui. Oui, si vous exécutez l'optimiseur, il peut être en mesure de faire une analyse plus approfondie et de trouver des problèmes plus subtils. Mais il ne va pas commencer à vous signaler une construction qui est maintenant superflue parce que l'optimiseur a réussi à la supprimer complètement.

Je pense donc que vous êtes à peu près en sécurité, ce qui est aussi proche d'un "oui" que vous l'obtiendrez de moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X