Ce code a un bug intéressant:Ordre d'évaluation d'affectation (Ai-je trouvé mon premier bug du compilateur?)
some_struct struct_array1[10] = {0};
some_struct struct_array2[10] = {0}
int i;
for (i = 0;
i < sizeof(struct_array1)/sizeof(struct_array1[0]);
struct_array1[i].value = struct_array2[i++].value = 1)
;
Pour la plupart des compilateurs, les résultats de code ci-dessus en définissant le champ « valeur » de tous struct dans les tableaux respectifs à 1. Cependant, pour un compilateur spécifique (appelons-le xcc), les structures de struct_array1 ne sont pas initialisées correctement. Le champ "value" est mis à 0 pour toutes les structures, ce qui m'a surpris.
Le code suivant fonctionne comme prévu sur tous les compilateurs:
for (i = 0;
i < sizeof(struct_array1)/sizeof(struct_array1[0]);
i++)
{
struct_array1[i].value = struct_array2[i].value = 1;
}
Maintenant, je suis complètement ici, ou le compilateur offensant « de XCC » afficher simplement un bug?
Je ne trouve rien qui affiche un comportement spécifique à l'implémentation dans le premier extrait de code; d'après ce que je comprends, l'incrémentation de postfix devrait avoir préséance sur les affectations, et les affectations devraient être évaluées de droite à gauche. Il ne devrait y avoir rien de bizarre avec le premier extrait de code, sauf que c'est un peu illisible.
ce n'est pas un bogue de compilateur, c'est un bogue de programmeur: le code implique un comportement non défini et est donc invalide C – Christoph
http://catb.org/~esr/faqs/smart-questions.html#id382249 –
Je vous suggère de google up comportement indéfini. –