Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Différence de résultat entre compilateurs

291 réponses
Avatar
YannicK
Bonjour,

éternel débutant en C pour mon plaisir, je me permets de venir vous
demander quelques éclaircissements sur une situation que je n'arrive pas
à comprendre :

J'utilise le cours en ligne spécial "grand débutant" du "site du zéro" :
<http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html>

Je réalise les exercices du cours dans deux environnements différents :
- sous windows vista avec l'IDE visual C++ 2008 express
- sous linux ubuntu 9.04 avec gcc

J'ai écrit un programme dans le cadre des exercices proposés sur les
tableaux par ce cours en ligne. Le fichier en question peut être
téléchargé ici :
< http://dl.free.fr/to7PFReLM/tableau.c>

Ce qui m'étonne, c'est que j'arrive à compiler sans difficulté ce code
sous Linux, et que le programme se comporte exactement comme je le
souhaite. Par contre, sous Windows, impossible de compiler, l'IDE me
renvoie 42 erreurs et 31 avertissements !!! La plupart des erreurs
semblent être liées aux variables. Par exemple :
"erreur de syntaxe : absence de ';' avant 'type'"
"identificateur non déclaré"

Or, j'ai beau lire et relire mon code, les variables me sembles toutes
déclarées correctement et il ne manque à mon sens pas de ";" en fin
d'instructions. De plus, comme je le disais au début, le même code se
compile sans aucune erreur sous Linux ...

Alors, comment expliquer que deux compilateurs réagissent aussi
différemment, et où et mon erreur ?

Merci par avance du temps que vous pourrez me consacrer,



--
YannicK
yann801 *arobase* yahoo *point* fr
yann801 *at* yahoo *dot* fr

10 réponses

Avatar
candide
-ed- a écrit :


Pour traiter les données d'un tableau dans une fonction ?

int a[] = {1,2,3};
int b[] = {4,5,6,7};

afficher (a, 3);
afficher (b, 4);

peux-tu indiquer le codage de afficher() sans pointeurs, ça
m'intéresse...




C'est quoi la question _précise_ ? Si c'est afficher la succession des éléments
d'un tableau d'entiers dont la longueur est donnée en paramètre de la fonction,
aucun problème (et tu le sais bien, cf. ton post de 10:57) :


#include <stdio.h>

void afficher(int t[], int n)
{
int i;

for (i = 0; i < n; i++)
printf("%d ", t[i]);
printf("n");
}

int main(void)
{
int a[] = { 1, 2, 3 };
int b[] = { 4, 5, 6, 7 };

afficher(a, 3);
afficher(b, 4);

return 0;
}

Pas l'ombre d'un pointeur ici, c'est complètement transparent pour l'utilisateur
et le code est parfaitement lisible et cohérent dans sa syntaxe. On peut faire
un grand nombre d'exercices intéressants (d'algorithmes en particulier) en ne
connaissant que cela. Et il est même possible que si tu parles longuement des
pointeurs, les étudiants risquent de ne plus avoir faire ces mêmes exercices.



Je te rappelle qu'il y a beaucoup d'étudiants hors filière info (je pense aux
licences de maths et physique et assimilés, licences pluridisplinaires, mais
aussi à des écoles d'ingé dans des filières non informatiques) qui subissent
l'enseignement du C et qui décrochent complètement dès qu'on leur parle de
pointeur surtout qu'en général ils ne voient pas assez du langage pour qu'ils
voient l'intérêt que ça pourrait avoir : les pointeurs c'est un investissement à
long terme.
Avatar
Gabriel Dos Reis
-ed- writes:

[...]

| Je ne suis pas sûr que le choix de passer directement de 'comptable' à
| 'programmeur C' soit une bonne idée...

Je vois comment cette phrase a un sens si on fait l'hypothèse que
« comptable » intrinsèquement implique l'exclusion irreconciliable
d'autres aptitudes.


-- Gaby
Avatar
Gabriel Dos Reis
"" writes:

[...]

| Je pense avoir acquis les principes de base avec un site :
| "algorithmes pour non-matheux" fait par un prof de Jussieux. Je suis
| intéressé par python mais je considère C en premier parce que on peut
| faire appel à C dans d'autres langages alors que on ne peut pas faire
| appel à d'autres langage dans C et il semble que C est à la base et
| que c'est un langage qui se compile rapidement.

Si tu veux faire du Python, le C est un détour dont tu peux te dispenser
dans la vaste majorité des programmes que tu écriras dans les prochains
mois. Ou alors, tu trolles.

-- Gaby
Avatar
Gabriel Dos Reis
-ed- writes:

| On 12 sep, 11:14, ""
| wrote:
| > Je pense avoir acquis les principes de base avec un site :
| > "algorithmes pour non-matheux" fait par un prof de Jussieux. Je suis
| > intéressé par python mais je considère C en premier parce que on peut
| > faire appel à C dans d'autres langages alors que on ne peut pas faire
| > appel à d'autres langage dans C et il semble que C est à la base et
| > que c'est un langage qui se compile rapidement.
|
| Alors tu n'est pas un simple comptable;

Quelle est la différence entre un « comptable » et un « simple comptable » ?

[...]

| Par contre, l'argument "se compile rapidement" est étrange. Python se
| 'compile' encore plus rapidement, vu qu'il est interprété (0
| compilation !).


Halt !

la compilation et l'interprétation ne sont pas exclusives !
Un programme Python peut être compilé (en bytecodes) et le résultat
interpreté. Idem pour Java, C#, etc.

-- Gaby
Avatar
Gabriel Dos Reis
candide writes:


[...]

| > Ce qui est troublant en C, c'est que, pour un paramètre,, les syntaxes
| > T *a et T a[] sont équivalentes :
| >
| > f(T *a) ou f(T a[])
| >
|
|
| Ah exactement le genre de truc qu'il faut dire à un débutant ! Que ces syntaxes
| soient équivalentes est totalement anecdotique et n'a AUCUNE implication
| pratique, c'est quelque chose qui ne sert quasiment jamais sauf à essayer
| d'impressionner à peu de frais les newbies.

Exact, dans 99% des cas.

-- Gaby
Avatar
Gabriel Dos Reis
"Stephane Legras-Decussy" writes:

| "Marc Boyer" a écrit dans le message de
| news: h8di13$tba$
| > C'est en effet un problème: dans une promo classique,
| > il y a 20% qui comprend du premier coup (et à du mal à
| > comprendre que les autres puissent ne pas comprendre),
| > et les autres.
| > Que fait-on des autres ?
|
| peut etre un changement dans l'approche...
| j'ai toujours vu le prof : bon maintenant on va aborder
| les pointeurs... froncement de sourcil, regards inquiets
| des étudiants...
|
| le truc ce serait de commencer par ça.... 1ère heure :

écrire des programmes en C.

La valeur pédagogiques des cours de programmation qui passent le plus
clair de leurs temps sur des détails purement techniques m'a toujours
impressioné.

-- Gaby
Avatar
Gabriel Dos Reis
-ed- writes:

| On 13 sep, 01:44, "Stephane Legras-Decussy" wrote:
| > "Marc Boyer" a écrit dans le message denews: h8di13$tb__BEGIN_MASK_n#9g02mG7!__...__END_MASK_i?a63jfAD$
| >
| > >   C'est en effet un problème: dans une promo classique,
| > > il y a 20% qui comprend du premier coup (et à du mal à
| > > comprendre que les autres puissent ne pas comprendre),
| > > et les autres.
| > >   Que fait-on des autres ?
| >
| > peut etre un changement dans l'approche...
| > j'ai toujours vu le prof : bon maintenant on va aborder
| > les pointeurs...  froncement de sourcil, regards inquiets
| > des étudiants...
| >
| > le truc ce serait de commencer par ça.... 1ère heure :
| >
| > le C : les types, les variables, les pointeurs, les adresses...
| >
| > le reste du C aux cours suivants...
|
| Ou commencer par l'assembleur ... C'est pas si difficile...

C'est déjà trop huat niveau.

-- Gaby
Avatar
Marc Boyer
Le 11-09-2009, Gabriel Dos Reis a écrit :
Marc Boyer writes:

| Les pointeurs sont incontournables (ou très difficilement
| contournable) pour:

La majorité de ceux qui font du Java n'ont jamais entendu parler de
pointeurs -- ou alors, ils savent que c'est un truc sale que les gens
peu évolués manipulent.



J'avoue que comme dans notre formation, C venait avant Java,
je n'ai pas vraiment connu ce problème.

Reste qu'on a toujours les mêmes problèmes avec les
mêmes notions:
- partage d'objet
- allocation dynamique
- durée de vie


Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Marc Boyer
Le 12-09-2009, Stephane Legras-Decussy a écrit :

"Marc Boyer" a écrit dans le message de
news: h8di13$tba$
C'est en effet un problème: dans une promo classique,
il y a 20% qui comprend du premier coup (et à du mal à
comprendre que les autres puissent ne pas comprendre),
et les autres.
Que fait-on des autres ?



peut etre un changement dans l'approche...
j'ai toujours vu le prof : bon maintenant on va aborder
les pointeurs... froncement de sourcil, regards inquiets
des étudiants...

le truc ce serait de commencer par ça.... 1ère heure :

le C : les types, les variables, les pointeurs, les adresses...



Bien sûr. Déjà, les types, en 1h...
Et tu cases où les opérateurs et les structures de controle ?


Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
Avatar
Marc Boyer
Le 11-09-2009, Gabriel Dos Reis a écrit :
Marc Boyer writes:

[...]

| > Les pointeurs, c'est simple.
|
| Voui, mais ça prend plus d'une heure.

Ça dépend.

C'est sûr que si le professeur donne l'impression que c'est compliqué,
les 2/3 des élèves imprimeront que c'est compliqué.



Il y a là une contradiction difficile à gérer pour l'enseignant.
D'une part, il sait qu'il faut que les étudiannts soient attentifs
à ce point, et qu'il les prévienne (à moins d'avoir des étudiants
dont l'attention est constante sur tout son cour, ce qui ne m'a
jamais été donné).
D'autre part, plus on dit que c'est difficile, plus les élèvent
impriment que c'est difficile.

Quel équilibre ? Je suis preneur de toute solution.

Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0