Deuxième plus grand [QCM 2002]

ait* (je ne sais pas s'il y a d'autres fautes, mais celle-ci me semblait particulièrement inesthétique)
Pour l'erreur, epsilon012 vient d'en donner une description (et une explication par la même occasion).

Ah oui, merci.
Cependant comme mon compilateur acceptait la chose, j'ai supposé ( à tord manifestement ) que c'était correct.
En effet, ce n'est pas parce la norme " n'oblige pas à " qu'on ne doit pas le faire. Mais ce sont des détails.

Tu vois comme j'anticipe !

Et ce même avec un compilateur qui ne prend pas la norme !

D'ailleurs, fort à propos, il existe un compilateur décent pour la nouvelle norme ou bien il ne faut pas trop rêver ? ( surtout que si la norme n'est pas encore majoritaire, ça pourrait produire des programmes non portables ).

Combien de temps avant que la nouvelle norme se généralise ? ( j'ai déjà croisé des immondices ne respectant même pas celle de 2003 ).

PS : désolé pour les fautes ! ( et merci pour la correction )

Tu sembles prendre un malin plaisir à les débusquer, mais, en ce qui me concerne, je trouve que la qualité orthographique globale du sujet est on ne peut plus acceptable ( compte tenu des horreurs apocalyptiques qu'on peut croiser ailleurs ).

tort*

Je n'ai jamais dit que la standard parlait de l'indentation, j'ai juste dit que Code::Blocks proposait des style d'indentations automatique différents ( pour éviter de devoir faire les tab à la main, il nous mâche le boulo pour que ce soit plus lisible ).

styles* indentation* boulot*

-> Tous les éditeurs de texte décents font ça. Et le concept même d'IDE m'est devenu répulsif dès que j'ai appris à manipuler la ligne de commande de g++ (ou mingw-g++ sous win, je crois). Parce qu'il est *tellement* plus simple d'ajouter des paramètres que des options à l'IDE !
Donc, je suis passé sous gvim/ligne de commande (gvim pour molokai qui ne passe pas bien sous konsole ... d'ailleurs, il faudra que je cherche pourquoi un de ces jours !). Et j'en suis heureux.
(Au passage, plutôt que d'aller chercher dans un menu la réindentation, lorsque je c/c un bout de code, =} est bien suffisant.)

Et en ce qui me concerne j’apprécie Code::Blocks : je ne trouve pas que ce soit un mauvais IDE

-> En effet. Le problème est justement que *c'est* un IDE. Celui que je hais le moins est, au passage, vc++.

@Ekleog : c'est une indice à propos de quelle question ?

-> C'est un indice à propos de l'erreur. En fait, le "return 0;" est inutile s'il est la dernière instruction du main.

ce n'est pas parce la norme " n'oblige pas à " qu'on ne doit pas le faire. Mais ce sont des détails.

La norme n'oblige pas le compilateur à le faire.
Donc ton programme est UB, du point de vue de la norme, si je ne m'abuse.
En gros, ton programme peut très bien compiler ou pas selon le compilateur.
C'est donc bien ton programme qui serait en faute, et non le compilateur, si jamais il y avait un problème.

Mais on peut te pardonner : tu es déjà passé au c++11 !

D'ailleurs, fort à propos, il existe un compilateur décent pour la nouvelle norme ou bien il ne faut pas trop rêver ?

g++ dans des versions récentes (j'ai la 4.6.0).
De mémoire, vc++ a aussi commencé à introduire les features c++11.

En gros, il faut aller voir sur le site de chaque projet pour voir où ils en sont. ;) (Pour g++, activer -std=c++0x)

( surtout que si la norme n'est pas encore majoritaire, ça pourrait produire des programmes non portables ).

C'est justement le fait d'écrire des programmes en c++11 qui rendra la norme utilisée.
Et pour la portabilité, comme il existe des compilos respectant la norme sur chaque plate-forme que je connais (ou, au pire, un cross-compilo), elle n'a pas de souci.

je trouve que la qualité orthographique globale du sujet est on ne peut plus acceptable ( compte tenu des horreurs apocalyptiques qu'on peut croiser ailleurs ).

Comme sur le *censuré* ? :p

@Ekleog : Heuu… je ne parlais pas du return 0; … S'il veut le mettre il a le droit, après il est vrai que :

ISO/IEC 14882:2003 §3.6.1/5

A return statement in main has the effect of leaving the main
function (destroying any objects with automatic storage
duration) and calling exit with the return value as the
argument. If control reaches the end of main without
encountering a return statement, the effect is that of executing
return 0;

@²lgorythme : hehe, désolé mais bon, un programme « hello, world! » faux, c'est marrant quand même. :) Et voit le bon côté des choses : tu viens d'apprendre quelque chose sur le C++.
Et si le compilateur n'est pas obligé de le faire alors tu dois considérer qu'il est possible qu'il ne le fasse pas. Donc, tu dois le faire toi même le #include <ostream> .

@Ekleog : Le problème avec les terms… il n'y en a pas un seul de valable. Mais xterm affiche bien molokai lui, sinon tu as un script qui te permet de convertir les thèmes GUI en thème 256-colors.
Et attention, le return 0; est inutile seulement si il est la dernière instruction exécuté du main.

dim, 01/04/2012 - 14:42 — Ekleog

> Donc ton programme est UB
Heuu… what? Il n'y a pas d'UB dans son programme il est purement et simplement ill-formed, pour rappel son programme est :

1
2
3
4
5
6
7
    1.   #include <iostream>
    2.  
    3.   int main()
    4.   {
    5.       std::cout << "Hello world!" << std::endl;
    6.       return 0;
    7.   }

Il y a deux erreurs, d'abord ligne 5, std::endl n'est pas déclaré, ensuite il manque une ligne 8.
S'il tient vraiment à garder ce programme, il peut le rendre standard comme cela :

1
2
3
4
5
6
7
8
9
    1.   #include <iostream>
    2.   #include <ostream>
    3.  
    4.   int main()
    5.   {
    6.       std::cout << "Hello world!" << std::endl;
    7.       return 0;
    8.   }
    9.

Après, est ce que c'est le Hello, world! le plus élégant ? Je n'en suis pas convaicu.

Pour l'instant le compilateur supportant le plus C++11 est g++4.7 (version de dev). Mais clang avance bien… (pour un BSDiste c'est important). Quant à VC++, ils peuvent s'amuser à supporter deux trois conneries de C++11, ils ont déjà un support pitoyable de C++03 et leur réponse c'est "Won't fix", leur stratégie c'est d'introduire le plus de variation possible pour imposer leur langage.

@Ekleog : Le problème avec les terms… il n'y en a pas un seul de valable. Mais xterm affiche bien molokai lui, sinon tu as un script qui te permet de convertir les thèmes GUI en thème 256-colors.

Il me semble que molokai a déjà un binding 256-color (il y a une partie avec un commentaire indiquant qu'il l'est).
Je ne sais pas pourquoi, mais il ne marche simplement pas ('faudra que je regarde mon vimrc un de ces jours, mais pour l'instant gvim me convient).

Et attention, le return 0; est inutile seulement si il est la dernière instruction exécuté du main.

exécutée*

Heuu… what? Il n'y a pas d'UB dans son programme il est purement et simplement ill-formed

Si il était ill-formed, g++ aurait été obligé d'introduire un warning / error / fatal, non ? J'ai hésité un moment entre UB et ill-formed. Si ill-formed signifie que le compilo' peut faire ce qu'il veut, alors tu as certainement raison. De toute façon, pour moi, ça revient au même : fôpa !

Quant à VC++, ils peuvent s'amuser à supporter deux trois conneries de C++11, ils ont déjà un support pitoyable de C++03 et leur réponse c'est "Won't fix", leur stratégie c'est d'introduire le plus de variation possible pour imposer leur langage.

N'empêche qu'ils ont fait un sondage pour savoir quelle est la prochaine feature c++11 qu'ils vont implémenter. Après, il faut voir ce qui va être réellement fait.
Mais si ils préfèrent abandonner le support c++03 pour tout mettre sur le c++11, je ne peux que les plussoyer ! (enfin, sauf si ils implémentent le fameux gc ...)

Hum, alors en fait ce n'est pas très clair dans le standard, mais après en avoir discuté un peu, il semblerait que ce soit bien un cas de « ill-formed without diagnose required ». Mais en fait on retombe sur l'ODR donc si ça compile, ça doit fonctionner à l’exécution, mais le programme reste quand même ill-formed, puisque il peut ne pas compiler.

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.