#1 Le 04/10/2020, à 17:08
- zephyre123
question sur une expression [RESOLU]
Bonjour,
Voici le code suivant :
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// Un pointeur de pointeur est exactement la meme chose qu'un vecteur de pointeur
// **p <=> *p[] mais ATTENTION pas la même chose qu'une matrice p[][]
static void traiter(char *s)
{
printf("- recu : %s\n", s);
}
int main(int argc, char *argv[])
{
char **p = argv;
while(true)
{
if(--argc <= 0) // Je ne comprends pas cette ligne ?
break;
p++;
traiter(*p);
}
return EXIT_SUCCESS;
}
Ce que je ne comprends pas dans ce code c'est cela : if(--argc <= 0) pouvez vous me l'expliquer ou bien me l'écrire différemment en séparant argc de l'opérateur --
car j'ai essayé le code suivant :
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// Un pointeur de pointeur est exactement la meme chose qu'un vecteur de pointeur
// **p <=> *p[] mais ATTENTION pas la même chose qu'une matrice p[][]
static void traiter(char *s)
{
printf("- recu : %s\n", s);
}
int main(int argc, char *argv[])
{
char **p = argv;
while(true)
{
if(argc <= 0)
{
argc--;
break;
}
p++;
traiter(*p);
}
return EXIT_SUCCESS;
}
Et ce code ne donne pas du tout les mêmes résultat que le premier et je ne comprends pas pourquoi ?
Pouvez vous me donner une explication svp ?
Dernière modification par zephyre123 (Le 04/10/2020, à 18:04)
Hors ligne
#2 Le 04/10/2020, à 17:23
- pingouinux
Re : question sur une expression [RESOLU]
Re-bonjour,
Quand tu écris
if(--argc <= 0)
la variable argc est décrémentée avant de faire le test. Dans ta boucle, tu fais le test et décrémente la variable après.
argc=5;
v=--argc; // v=4; argc=4
v=argc--; // v=4; argc=3
Hors ligne
#3 Le 04/10/2020, à 18:01
- zephyre123
Re : question sur une expression [RESOLU]
Ok pingouinux j'ai maintenant compris en faite il n'y a jamais de break avec le second programme car la condition (argc <= 0) n'est jamais valider du coup on boucle sur le reste .
Bref j'ai tout compris.
C'est hyper subtil tout de même !
Merci encore pingouinux.
Dernière modification par zephyre123 (Le 04/10/2020, à 18:03)
Hors ligne