Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Mon professeur de langage C vient de soutenir mordicus qu'afficher une variable de type entière non initialisée va planter le programme. Donc je résume :
int a;
printf("a = %d", a);

Ceci serait selon lui susceptible de complètement planter le programme. Il le lance, et ça lui affiche une valeur aléatoire comme je le pensais.

Il regarde l'écran hébété, et finit par dire : « Ah, bah j'ai eu de la chance ». Puis continue en disant : « Ma variable aurait pu pointer à un endroit interdit ».

Avec un pointeur je veux bien, mais là… PEBKAC.
PEBKAC #9110 proposé par Lynix le 14/12/2013 | 30 commentaires | 👍🏽 👎🏽 +218
Précision supplémentaire, une heure après ce PEBKAC il commence à détailler la structure interne des nombre flottants (Un bit de signe, 23 bits de mantisse et 8 bits d'exposant pour les float, donc la norme IEEE 754).

Ensuite un élève qui a déjà expérimenté le C lui a demandé quelle valeur prenaient les bits pour symboliser l'infini, le prof lui a rétorqué que c'était impossible et que ça allait faire planter le programme, quand je lui ai montré qu'une division par zéro pouvait renvoyer l'infini ou NaN, il m'a encore dit que j'avais eu de la chance (Je veux bien que ça ne soit pas standard, par contre c'est dans la norme IEEE 754 qu'il étudie).

Je me sens vraiment très chanceux à ce cours :D
Commentaire #122531 écrit par Lynix le 14/12/2013 à 12h36 | 👍🏽 👎🏽
Il a de la chance, oui, qu'on ne l'ait pas ridiculisé sur place.
Commentaire #122540 écrit par Aaargh!!! le 14/12/2013 à 13h03 | 👍🏽 👎🏽
Et tu lui as expliqué après coup tout cela (le coup du pointeur et le NaN) ?

Curieux de connaître sa réaction ...
Commentaire #122546 écrit par Noname le 14/12/2013 à 13h23 | 👍🏽 👎🏽
On peu une division infinie? Moi la dernière fois il a planté lamentablement.
Commentaire #122552 écrit par Partux le 14/12/2013 à 13h34 | 👍🏽 👎🏽
Une division entière par zéro va faire planter ton programme, mais y'a pas de problème avec les flottants.
Commentaire #122556 écrit par Lynix le 14/12/2013 à 14h25 | 👍🏽 👎🏽
Que sur les flottants ;)
Commentaire #122557 écrit par but2ene le 14/12/2013 à 14h25 | 👍🏽 👎🏽
J'ai eu des emmerdes dans mon école l'an passé à force de corriger les profs, du coup j'évite.

Surtout que lui, contrairement à mes anciens profs, il a l'air de savoir ce qu'il raconte, en fait c'est plutôt un programmeur à qui on a demandé d'être prof plutôt que l'inverse.

Enfin, de savoir ce qu'il raconte excepté pour certains détails, mais jusqu'ici rien de bien grave (Par contre ça fait des PEBKAC :D).
Commentaire #122558 écrit par Lynix le 14/12/2013 à 14h32 | 👍🏽 👎🏽
Il y a plein de conventions comme ça en C. D'ailleurs, petite colle, quel est le plus court programme C valide (qui compile) ?
Commentaire #122562 écrit par leafty le 14/12/2013 à 15h39 | 👍🏽 👎🏽
Laisse moi deviner, ta valeur aléatoire était 2.
Commentaire #122563 écrit par MonsieurJeSaisTout le 14/12/2013 à 15h42 | 👍🏽 👎🏽
Pas loin ! (À quelques 17 millions près)
Commentaire #122566 écrit par Lynix le 14/12/2013 à 15h52 | 👍🏽 👎🏽
main(){}
Commentaire #122569 écrit par D-z (pas loggé) le 14/12/2013 à 16h50 | 👍🏽 👎🏽
Curieux de connaitre quel est ce prof... ! x)
Commentaire #122574 écrit par Mqx. le 14/12/2013 à 17h32 | 👍🏽 👎🏽
est ce que ya des options de gcc qui font qu'il initialise automatiquement les variables (genre à zéro)?
Commentaire #122580 écrit par yomama le 14/12/2013 à 19h28 | 👍🏽 👎🏽
17 000 002?
Commentaire #122583 écrit par ROB le 14/12/2013 à 19h44 | 👍🏽 👎🏽
D'après mes recherches (courtes...), ce n'est pas possible de façon simple et propre, en particulier en C.
Sinon, tu peux initialiser tes variables au moment de les déclarer.
Commentaire #122589 écrit par Somadeva le 14/12/2013 à 23h32 | 👍🏽 👎🏽
Ben, avec un peu d'imagination... un fichier vide, c'est pas un programme, ça linke pas, et ça passe pas en pedantic, mais pour compiler, ça compile !
Commentaire #122626 écrit par b0fh le 15/12/2013 à 21h33 | 👍🏽 👎🏽
Ou lancer une routine qui malloc() toute la mémoire disponible et l'écrase ?
Commentaire #122631 écrit par Foxkilt le 16/12/2013 à 01h33 | 👍🏽 👎🏽
Si tu recodes tout les types (Boulot de maso ou de type qui a du temps a perdre) , tu dois sans doute avoir un moyen de les initialiser a 0
Commentaire #122633 écrit par Alaff le 16/12/2013 à 06h31 | 👍🏽 👎🏽
un bon vieux "hello word" ? XD
Commentaire #122643 écrit par Kototsu le 16/12/2013 à 10h13 | 👍🏽 👎🏽
Le C n'ayant pas de constructeur, nein.

Sinon ça revient à créer ton propre langage.
Commentaire #122646 écrit par Lynix le 16/12/2013 à 11h02 | 👍🏽 👎🏽
Encore plus court :P.
Commentaire #122648 écrit par leafty le 16/12/2013 à 11h50 | 👍🏽 👎🏽
Je propose P

si c'est ça, je vous offrirais la commande pour le compiler... sinon tant pis....
Commentaire #122659 écrit par Garf365 le 16/12/2013 à 16h22 | 👍🏽 👎🏽
Le plus court programme en C non invalide entre les guillemets : «».

(Source http://www.ioccc.org/1994/smr.hint )
Commentaire #122661 écrit par Geist le 16/12/2013 à 16h42 | 👍🏽 👎🏽
Je ne vois pas de compilation pour smr.c dans le Makefile
Commentaire #122662 écrit par Garf365 le 16/12/2013 à 16h54 | 👍🏽 👎🏽
Je pense que le prof voulait dire que prendre la valeur d'une variable non-initialisée est un "undefined behaviour" et que dans ce cas un compilateur a le droit (tout en respectant la norme) de faire absolument ce qu'il veut (rien, planter, effacer le disque dur...).

En l'occurrence, je ne suis pas sûr que ce soit réellement un "undefined behaviour"... Je dirais que oui d'après cette page :
http://stackoverflow.com/questions/11962457/why-is-using-an-uninitiali[...]
parce que l'adresse n'est jamais prise, mais quand on rentre dans des trucs comme ca, en général je me contente de savoir que c'est Pas Bien (c)(tm) sans chercher à en savoir plus :-)

Ceci dit, si un prof qui est censé être maitriser son domaine sort des trucs comme ca... c'est pas très bon signe pour le reste du cours !
Commentaire #122686 écrit par Mufman le 16/12/2013 à 18h39 | 👍🏽 👎🏽
Cela pourrait dépendre de l'OS, quand tu exécutes un programme il lui réserve un espace d'adressage (pile et tas).
On pourrait très bien modifier un noyau pour qu'il initialise la mémoire attribuée à 0.
Commentaire #122707 écrit par xTG le 16/12/2013 à 21h11 | 👍🏽 👎🏽
Il a insisté cinq ou six fois sur le fait que ça allait planter le programme, et semblait déterminé à nous le prouver "Bon allez, pour vous le montrer je vais lancer le programme... silence Ah bah j'ai eu de la chance !".

Et ça n'est pas le genre de prof très pédagogue dans le sens où il ne cache pas des éléments aux étudiants pour qu'ils comprennent, ça je l'ai compris quand il a essayé d'expliquer les pointeurs juste après avoir dit "ma variable aurait pu pointer à un endroit interdit", bien entendu sans grand succès, c'était au premier cours et seules les variables avaient été abordées :D

Quoique, ça n'est pas une si mauvaise idée dans le sens où les pointeurs ne font pas intervenir de notion supplémentaire et sont très importants dans le langage, par contre ça rebuterait des étudiants, le problème étant que même si les pointeurs sont très simples, les aborder la première fois est très difficile.
Commentaire #122716 écrit par Lynix le 17/12/2013 à 01h17 | 👍🏽 👎🏽
Personnellement j'espère pour moi que vous n'en entendrez pas beaucoup parler de celui-là ^^
Commentaire #122717 écrit par Lynix le 17/12/2013 à 01h20 | 👍🏽 👎🏽
Le problème de la première fois, c'est pas de pointer, hein…
Commentaire #122727 écrit par Ishido le 17/12/2013 à 08h51 | 👍🏽 👎🏽
@Geist : J'ai précisé "qui compile". Là, le coup du smr, c'est malhonnête et pas vraiment du C.
Commentaire #122861 écrit par leafty le 18/12/2013 à 01h37 | 👍🏽 👎🏽