IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

int main (int argc,char** argv)


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 46
    Points : 0
    Points
    0
    Par défaut int main (int argc,char** argv)
    Bonjour

    si le vous plais je trouve du mal a comprendre les arguments de la fonction principale de ce programme et surtout la désignation des deux étoiles


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #include "MCharImage.h"
    #include "MDetecteur.h"
    #include "MListePI.h"
    //#include "MListeCouples.h"
    #include "MUtils.h"
     
    using namespace std;
    using namespace local_vis_eric;
     
    int main (int argc,char** argv)
    {
      MCheckCpu();
      //MSetWithMmxSseUse(2);  //0->pas de SIMD, 1->MMX et SSE (Pentium 3 et AMD), 2->SSE2 (Pentium 4)
     
      if (argc==3)
      {
        //Ouverture des images
        cout << "ouverture des images" << endl;
    		MCharImage Image1,Image2;
    		Image1.Load(argv[1]);
    		Image2.Load(argv[2]);
    cout << "ouverture des images ok" << endl;
    		int x=Image1.x();
    		int y=Image2.y();
     
    		cout << " dim : " << x << " " << y << endl;
        //Detection des points
        // Attention : utiliser un detecteur diff�ent pour chaque image
        // Les detecteurs doivent etre conserves pour l'appariement
    		MDetecteurHarris Detecteur1(x,y),Detecteur2(x,y);
    		MListePI ListePI1,ListePI2;
    		int res = Detecteur1.DetecteBaquets(Image1,ListePI1,8,8,20,500,true);
            cout << "Npoints : " << res << endl; //Subpixel=true
     
     
     
     
    		Detecteur2.DetecteBaquets(Image2,ListePI2,8,8,20,500,true); //Subpixel=true
    		cout << ListePI1.getNbPoints() << " ; " << ListePI2.getNbPoints() << endl;
    /*
    		for(int i = 0 ; i < ListePI1.getNbPoints() ; i ++)
    		cout << "[" << ListePI1.getX(i) << " " << ListePI1.getY(i) << "]";
    */
    		cout << endl;
    /*
    		for(int i = 0 ; i < ListePI2.getNbPoints() ; i ++)
    		cout << "[" << ListePI2.getX(i) << " " << ListePI2.getY(i) << "]";
     
    */
            //system("pause");
     
    		//Appariement
    		//60x40 : taille de la fenetre de recherche, 0.8 : score minimum pour valider l'appariement
    		//~ MListeCouples ListeCouples;
    		//~ ListeCouples.Apparie(ListePI1,Detecteur1,ListePI2,Detecteur2,120,80,0.8);
    		//~ ListeCouples.KeepBest();
     
    		//~ MCharImage im(512,384);
    		//~ ListeCouples.DrawSelected(im,1,1,255);
    		//~ im.Save_pgm("pouet.pgm");
    		//ListeCouples.Create(ListePI1,ListePI2,120,80,0.8);
     
     
     
    		//Affichage
    		//~ for (int i=0;i<ListeCouples.getNbCouples();i++)
    		//~ {
    			//~ float x1,y1,x2,y2;
    			//~ ListeCouples.GetCoords(i,x1,y1,x2,y2);
    			//~ cout << "("<<x1<<","<<y1<<")-("<<x2<<","<<y2<<")"<<endl;
    		//~ }
    	}
    	else cout << "Usage : exemple image1.pgm image2.pgm" << endl;
    	//system("pause");
    	return 0;
    }

  2. #2
    Membre habitué Avatar de jockhip12
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 195
    Points : 134
    Points
    134
    Par défaut
    Bonjour,
    char** = c'est une allocation dynamique

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Saltu,

    Il existe deux signatures standard pour la fonction main:
    1. lorsque l'on ne souhaite pas récupérer les arguments passés en ligne de commande
    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      int main(int argc, char ** argv) /* ou */ int main(int argc, char *argv[])
      s'il est nécessaire (ou utile) de récupérer les arguments passés en ligne de commande
    Cette deuxième signature fournit (dans une version "C style") tout ce qu'il faut pour récupérer les dits arguments, à savoir:
    • int (ici argc) : le nombre d'arguments passés à la fonction +1
    • char ** (ici argv) : un tableau de chaines de caractères "C style" comprenant chacun des arguments passés en ligne de commande
    Cela n'a rien à voir avec l'allocation dynamique, c'est simplement parce qu'un pointeur de pointeur sur char est parfait pour contenir un tableau de tableau de char dont chaque "sous tableau" est sensé se terminer par '\0' (comme toute chaine "C style".

    Si l'entier (argc) contient le nombre d'arguments passés à la fonction +1, c'est parce que le tout premier argument, celui qui sera d'office passé (argv[0]) contiendra le nom de l'exécutable, à quelque variations près (selon l'OS, soit uniquement le nom de l'exécutable, soit le chemin d'accès à l'exécutable et son nom).

    Le test va donc vérifier qu'il y a bien deux arguments en plus que le nom de l'exécutables, et réagir en conséquence:

    Si c'est le cas, l'application essayera d'ouvrir les deux fichiers (ou du moins ce qui est considéré comme tel), autrement, elle indiquera à l'utilisateur ce qu'elle attend de lui (le nom valide de deux fichiers images)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    merci koala01 ^^ , je pensais à cette question
    ( javais une autre , comment passer les arguments a mon programme lors de l'execution ! )

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Cela n'a rien à voir avec l'allocation dynamique, c'est simplement parce qu'un pointeur de pointeur sur char est parfait pour contenir un tableau de tableau de char dont chaque "sous tableau" est sensé se terminer par '\0' (comme toute chaine "C style").
    La question intéressante serait : pourquoi se trimballe-t-on encore des tableaux de chaînes à la C, alors qu'on est en C++ ?

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par oodini Voir le message
    La question intéressante serait : pourquoi se trimballe-t-on encore des tableaux de chaînes à la C, alors qu'on est en C++ ?
    La réponse est toute simple: pour des raisons historiques de compatibilité
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. int main (int argc, char ** argv)
    Par wallace27 dans le forum C++
    Réponses: 5
    Dernier message: 26/06/2015, 14h33
  2. Transformer (int année, int mois, int jour) en millisecondes
    Par Logic_613 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/04/2012, 11h08
  3. Exécution main(int argc,char **argv)
    Par jadoud dans le forum Visual Studio
    Réponses: 1
    Dernier message: 28/01/2012, 14h34
  4. Explication pour ca SVP -> int main(int argc, char *argv[])
    Par Hackaholic dans le forum Débuter
    Réponses: 7
    Dernier message: 01/09/2009, 09h05
  5. int main(int argc, char** argv)
    Par MABB dans le forum C++
    Réponses: 1
    Dernier message: 19/11/2007, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo