Analyse d'un programme potentiellement dangereux

Le problème exposé dans ce sujet a été résolu.

@Renault: Je n’aime pas ton argument de la compatibilité ascendante. C’est faux, C strict où non, la compatibilité n’est que moyenne. Grossomodo, ça marche mais, c’est bien plus compliqué que ça.

Je n’ai pas dit que cette compatibilité était parfaite, mais elle est là et globalement ils sont frileux (à raison) à chambouler la syntaxe et les règles de base.

Et c’est normal, le C et C++ sont partout dans la base d’un système. Dans mon métier je le constate fréquemment quand GCC durci un peu certaines règles par défaut (ce qu’elle a fait depuis 10 ans régulièrement), le travail que cela induit derrière est énorme.

Renault

C’est vaguement présent, mais il suffit d’une nouvelle optimisation pour faire péter un code buggué qui tombait en marche. Ce ne sont pas des "règles de bases", ce sont des comportements aux limites que nous avions observés et que nous avons supposés, à tord, comme étant pérennes.

Il ne faut en aucun cas supposer que le code produit sur un comportement non défini sera toujours identique avec les versions futures d’un même compilateur.

Maintenant on commence à avoir des warnings qui s’améliorent de version en version, des sanitiseurs, des compilos alternatifs pour compiler les tests, des outils d’analyse de code. Il faut profiter de tout cela pour réduire les risques d’UB dans nos codes, et d’avoir des produits qui tombent en marche.

Pour résumer, c’est juste une multiplication capillotractée, qui revient à faire une petite optimisation, que tu n’auras pas forcément besoin de faire avec les compilateurs récents puisqu’ils la feront probablement pour toi (elle revient à écrire * 1024 * 1024 * 1024). Mais les « vieux » programmeurs sont souvent habitués à faire ce genre de chose, notamment parce que c’est un tout petit peu plus rapide à exécuter/écrire en assembleur ou ce genre de choses.

r0anne

Toute l’explication est bonne, par contre, pour la motivation, elle tient au fait que les gens qui me lisent habituellement savent que << 10 c’est multiplier par 1024, et que << 30 est bien plus rapide à lire que * 1024 * 1024 * 1024. En plus, ça ne prend pas le quart de la longueur de la ligne. Le gain sur les compilateurs des années 80 n’est pas ma motivation. Et, effectivement, j’utilise kB pour 1024 bytes, parce que les gens avec qui je discute le font aussi, parce que je ne manipule jamais de quantités de données multiples de puissances de 10, et que je n’ai donc pas besoin de notation pour ça. Bon, évidemment, c’est totalement inadapté dans un contexte de vulgarisation, ça fait longtemps que je ne me suis pas adressé à un public non-averti, il faut que je me réhabitue.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte