Se connecter avec
S'enregistrer | Connectez-vous

Initialisation "bizarre" en C

Dernière réponse : dans Programmation

bonsoir,

au travail aujourd'hui j'ai rencontré une forme d'initialisation "bizarre" d'une variable de type simple. Le compilateur ne s'en offusque pas et ne daigne même pas sortir un warning :) 

alors voici un exemple pour reproduire (simplifié par rapport à notre appli).

  1. int main(int argc, char ** argv)
  2. {
  3. int t = (10, 20);
  4.  
  5. return 0;
  6. }


Quelqu'un pourrait-il m'expliquer comment le compilateur interprète ça ? que vaut "t" et pourquoi surtout ?
Compilateurs/environnements testés : gcc sous Linux, Microsoft Visual C++ 6.0 et Microsoft eMbedded C++ 4.2.

Note : j'ai retrouvé le développeur responsable de ce code... en fait il s'agit d'une erreur de sa part, on a de la chance que cela fonctionne :pfff: 

Merci d'avance !

Autres pages sur : initialisation bizarre

Lassé par la pub ? Créez un compte

sanglier08 a dit :
au travail aujourd'hui j'ai rencontré une forme d'initialisation "bizarre" d'une variable de type simple. Le compilateur ne s'en offusque pas et ne daigne même pas sortir un warning :) 

Quelqu'un pourrait-il m'expliquer comment le compilateur interprète ça ? que vaut "t" et pourquoi surtout ?
Compilateurs/environnements testés : gcc sous Linux, Microsoft Visual C++ 6.0 et Microsoft eMbedded C++ 4.2.

Le message de gcc est assez clair :
  1. #include<stdio.h>
  2.  
  3. int main (void)
  4. {
  5. int t = (10, 20);
  6.  
  7. printf ("t=%d\n", t);
  8. return 0;
  9. }


../main.c: In function `main_':
../main.c:5: warning: left-hand operand of comma expression has no effect

Une expression avec l'opérateur 'virgule' est évaluée de gauche à droite. Seule la valeur de l'opérande le plus à droite est retourné.

Citation :
Ne plus douter : GCC est bien le meilleur compilo.

Tu parles probablement de gcc, car GCC, c'est la Gnu Compiler Collection... à ne pas confondre avec gcc qui est le Gnu C Compiler. Oui, c'est subtil mais gens de Gnu sont comme ça...

Effectivement, gcc a un bon système de warning... quand on sait le configurer...

Dans le genre, le compilateur Intel (icc) est aussi remarquable !

merci :) 
avec un warning c'est tout de suite plus compréhensible...

d'ailleurs, quelles options de compilation utilisez-vous ? Nous on n'utilise que -ansi, et ça ne semble pas suffisant...

voici les infos de gcc :

  1. : gcc -v
  2. Lecture des spécification à partir de /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
  3. Configuré avec: ../configure --prefix=/usr --mandir=/usr/share/man
  4. --infodir=/usr/share/info --enable-shared --enable-threads=posix
  5. --disable-checking --with-system-zlib --enable-__cxa_atexit
  6. --host=i386-redhat-linux
  7. Modèle de thread: posix
  8. version gcc 3.2.3 20030502 (Red Hat Linux 3.2.3-42)
  9. :


merci encore pour la réponse

sanglier08 a dit :
merci :) 
d'ailleurs, quelles options de compilation utilisez-vous ? Nous on n'utilise que -ansi, et ça ne semble pas suffisant...

Au minimum
-Wall -Wextra -O2 -ansi

ou
-Wall -W -O2 -ansi

avec les versions anciennes.

J'ai aussi un mode paranoïaque à 36 paramètres...

-O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long
Lassé par la pub ? Créez un compte