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.
Sur le site d'un enseignant d'une université de la capitale des Gaules, on pouvait trouver les diaporamas des cours magistraux assurés par ce professeur. C'est ainsi que dans le premier cours de « Algorithmique et Programmation » (semestre 1 de la première année de Licence), j'ai pu apprendre l'existence du langage C+, inventé par Denis Ritchie, et de sa syntaxe de base :

#include <iostream.h>
  int main {
    cout << "hello world" ;
}

Je comptais aller étudier là-bas, mais je vais peut-être y réfléchir à deux fois… PEBKAC.
PEBKAC #8479 proposé par Échec et Matt le 01/09/2013 | 16 commentaires | 👍🏽 👎🏽 +168
Cap'tain Obvious, vous êtes là ?
Commentaire #108912 écrit par Voynich le 01/09/2013 à 12h47 | 👍🏽 👎🏽
1. Le C+ n'existe pas, le C++ oui ;
2. le fichier d'en-tête iostream.h est déprécié depuis bien longtemps pour le fichier iostream ;
3. le C++ a été créé par Bjarn Stroustrup et non Dennis Ritchie (qui est, avec Brian Kernighan, à l'origine du C, ancêtre du C++) ;
4. le C++ est un langage objet et l'exemple ne montre pas du tout cette facette ;
5. main doit renvoyer une valeur pour indiquer si le programme s'est bien déroulé : 0 si pas de problème et un code d'erreur sinon ;
6. généralement main prend également en paramètre int argc et char** argv qui sont les paramètres transmis au programme ;
7. pour que ce programme compile il faudrait ajouter un using namespace std; ou alors écrire std::cout ;
8. l'indentation est hasardeuse (pourquoi indenter int main ?) ;
9. un détail, mais placer les accolades de cette sorte est plus "javaiste" que C++iste.

Voilà, moi aussi je douterais des compétence de ce professeur :)
Commentaire #108915 écrit par Asdf le 01/09/2013 à 13h03 | 👍🏽 👎🏽
Ah, Cap'tain Obvious est encore en vacances, donc.
Merci pour toutes ces précisions... en effet, ça fait beaucoup de PEBKAC en peu de lignes.
Commentaire #108917 écrit par Voynich le 01/09/2013 à 13h14 | 👍🏽 👎🏽
Les paramètres du main sont facultatifs, il me semble. En revanche, main ne respecte pas la syntaxe d'une signature de fonction : il faudrait du main(void), ou au moins du main().
Commentaire #108920 écrit par Epok__ le 01/09/2013 à 13h48 | 👍🏽 👎🏽
"généralement main prend également en paramètre [...]" donc oui, ils sont facultatifs, mais tout de même recommandés car généralement nécessaires pour le debug. Surtout pour un cours de débutant, qui a priori ne feront pas de jolies GUI pour interagir avec le programme,
Commentaire #108922 écrit par Asdf le 01/09/2013 à 14h02 | 👍🏽 👎🏽
Et il manque la fin de ligne pour faire joli, aussi.
Commentaire #108923 écrit par b0fh le 01/09/2013 à 14h02 | 👍🏽 👎🏽
Et il n'y a pas de namespace non plus.
Commentaire #108924 écrit par Skefrep le 01/09/2013 à 14h11 | 👍🏽 👎🏽
Ça me rappelle des souvenirs...
Et évidemment pour certains ça a été le drame lorsqu'aux rendus de TP de L3 on demande de rendre du C ANSI pedantic.
Commentaire #108933 écrit par mAn le 01/09/2013 à 16h26 | 👍🏽 👎🏽
Vu la tête de l'exemple de code, je dirais que c'est le professeur en question qui est l'inventeur du C+ : un mélange de C et de C++, avec des fautes en plus histoire de faire plus fun...
Commentaire #108950 écrit par Raizarachi le 01/09/2013 à 18h06 | 👍🏽 👎🏽
Ca fait longtemps que je n'ai pas codé de C/C++, mais le retour du main n'est pas facultatif (comprendre que ça compile et s'exécute correctement même sans le retour, mais c'est crade) ?
Pour le point 9, jamais entendu parler de ce "javaisme", par contre certains IDE placent automatiquement les accolades de telle ou telle façon.
Commentaire #108998 écrit par Acorah le 01/09/2013 à 22h23 | 👍🏽 👎🏽
c'est du C#!!!
Commentaire #109033 écrit par nonolelion le 02/09/2013 à 09h20 | 👍🏽 👎🏽
Tu sors :)
Commentaire #109058 écrit par Kaoru le 02/09/2013 à 11h44 | 👍🏽 👎🏽
#)
Commentaire #109244 écrit par nonolelion le 03/09/2013 à 09h09 | 👍🏽 👎🏽
>> 6. généralement main prend également en paramètre int argc et char** argv qui sont les paramètres transmis au programme
Il peut aussi s'écrire "int main()". Attention, en C++, on préfère utiliser "void func()" plutôt que "void func(void)". Le "void" dans un argument de fonction est un reliquat du C. En C, mettre un "void" en argument veut dire: ma fonction ne prend pas d'arguments. Ne rien mettre, veut dire: prend un nombre arbitraire d'arguments (dont l'utilisation est indéfinie, généralement ignorée). Ce comportement est lui même un reliquat du C pre-ansi.
En C++, plus besoin de mettre "void" dans un argument de fonction. C'est une des différences méconnues entre C et C++.

>> 7. pour que ce programme compile il faudrait ajouter un using namespace std; ou alors écrire std::cout ;
<iostream.h> n'est pas dans un namespace, contrairement à <iostream>, donc ça compile (mais on est d'accord que c'est moche :p).
Commentaire #109447 écrit par cpp le 04/09/2013 à 14h52 | 👍🏽 👎🏽
1. Indeed. Et il me semble même que le func(void) est assez "ancestral" (au même titre que la déclaration des paramètres hors des paranthèses). En tout cas je n'ai rencontré ces pratiques que dans des manuels UNIX des années 70-80.

2. Oui, mais iostream.h n'a jamais été un standard (et il n'est d'ailleurs plus fourni ni avec libc++ ni avec libstdc++), alors que iostream fait partie de la lib standard. Du coup j'imagine qu'il n'est fourni que par VC++ ?
Commentaire #109504 écrit par Asdf le 05/09/2013 à 11h38 | 👍🏽 👎🏽
1) En gros:
C: func(void)
C++: func()

2) J'ai vu des <iostream.h> sur des vieilles applications. Raison pour laquelle je sais que ça compile :p. En revanche, ça n'a effectivement jamais été un standard, et ce n'est pas une bonne nouvelle de le voir dans un code (annonciateur d'un projet pourri ^^).
Commentaire #109524 écrit par cpp le 05/09/2013 à 13h47 | 👍🏽 👎🏽