Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 petites questions...

    13 octobre 2006 à 16:33:58

    Bonjour a tous !
    J'ai deux petites questions à vous poser :
    1) Que veut dire "argc" et "*argv[]" dans la fonction main ? J'en suis à la SDl et j'ai toujours pas compris ça moi :p

    2)J'ai créé un fichier pour jouer du son en SDL mais il ne marche pas. Je ne trouve pas l'erreur ou est elle ? ^^
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <FMOD/fmod.h>

    int main(int argc, char *argv[])
    {
        FSOUND_SAMPLE *tir = NULL;

        FSOUND_Init(44100, 32, 0);
        SDL_Init(SDL_INIT_VIDEO);

        tir = FSOUND_Sample_Load(FSOUND_FREE, "pan.wav", 0, 0, 0);
        if (tir == NULL)
        {
            fprintf(stderr, "Impossible de lire pan.wav\n");
            exit(EXIT_FAILURE);
        }

        FSOUND_PlaySound(FSOUND_FREE, tir);

        FSOUND_Sample_Free(tir);

        SDL_Quit();
        FSOUND_Close();

        return 0;
    }


    J'avais essayer avec un de mes sons mais vu que ça n'a pas marché j'ai pris celui de Mathéo... et sa ne marche tjr pas :(
    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2006 à 16:46:45

      Pour la 1ére question:
      C'est un peu particulier. La fonction "main" peut s'écrire avec aucun, un, deux ou 3 paramètres selon ton besoin. Chaque paramètre est un lien entre le programme et son environnement extèrieur.

      Le premier paramètre est de type "int". Il contient le nombre d'arguments passés au programme (un argument étant une valeur située entre le nom du programme et la fin de la ligne style "mkdir toto" => "toto" est l'argument du programme "mkdir" ).
      Ce paramètre est conventionnellement nommé "argc" pour "arg count" mais rien ne t'empêche de le nommer "zorglub" si t'en as envie.
      Donc si t'as besoin d'avoir juste le nb d'arguments, tu peux écrire "int main (int argc)". Ensuite, dans ton programme, tu pourras à loisir utiliser cette variable "argc" chaque fois que tu voudras savoir combien d'arguments ont été passés à ton programme.
      Ex:

      int main (int argc)
      {
          printf("Vous avez entré %d arguments\n", argc);
      }

      Le second paramètre contient la liste de tous les arguments. Evidemment très utile quand il faut les traiter. Un argument étant une chaîne et une chaîne se caractérisant par l'adresse du premier caractère (de type "char *" ), la liste de ces arguments est donc un tableau de chaînes ("char *[]" ) ou l'adresse de la première adresse ("char **" )
      Cette variable est conventionnellement nommée "argv" pour "arg value" mais rien (hormis ta conscience) ne t'empêche de la nommer "popol".
      Ainsi, si tu lances ton programme avec 3 arguments style
      pgm toto titi tata
      Alors "argv[0]" contiendra l'adresse du début de la chaîne "pgm" (le nom du programme lui-même), "argv[1]" contiendra l'adresse du début de la chaîne "toto", etc etc jusqu'à "argv[2]" qui contiendra l'adresse de début de la chaîne "tata". Et, particularité supplémentaire, "argv[3]" contiendra "NULL". Tu peux utiliser cette valeur particulière comme condition de fin ou bien utiliser "argc" à ton choix.
      Ex:

      int main (int argc, char *argv[])
      {
          int i;
          printf("Vous avez entré %d arguments\n", argc);
          for (i=0; i < argc; i++)
              printf("L'argument n° %d est [%s]\n", i, argv[i]);
      }

      Le 3° paramètre contient la liste de toutes tes variables d'environnement. Cette notion d'environnement est très forte sous Unix et systèmes parallèles et un peu plus masquée sous "Windows" (il faut faire un "clic droit" dans "poste de travail" => propriétés" => onglet "avancé" => bouton "variables d'environnement" )
      Grace à ce paramètre, tu peux donc récupérer la valeur de chaque variable dans ton programme.
      Comme pour "argv", ce paramètre étant une liste de chaînes il est de type "char *[]" et on le nomme conventionnellement "envp" pour "environment program". Et comme pour "argv", il contient une valeur particulière à "NULL" pour marquer la fin de la liste.
      Ex:

      int main (int argc, char *argv[], char *envp[])
      {
          char **pt;
          printf("Liste des variables d'environnement\n" );
          for (pt=envp; *pt != NULL; pt++)
              printf("La variable est [%s]\n", *pt);
      }

      Evidemment, si tu écris un programme qui n'a pas besoin de ces paramètres, ben tu ne les déclares pas dans le main et puis c'est tout...
      ;)
      EDIT: et dans tout les exemple du tuto de m@teo21 tu peut utilisé main(void)..
      selement......

      ^^
      • Partager sur Facebook
      • Partager sur Twitter
        13 octobre 2006 à 16:54:20

        Oki ! Donc à ce que j'ai compris ça marchera très bien si je mets :

        int main()
        {
        }

        Et sinon quelqu'un aurait-il la solution à l'autre problème ? Comme perso je ne vois pas d'erreurs se pourrait il que j'ai mal installé les fichiers de Fmod ?
        • Partager sur Facebook
        • Partager sur Twitter
          13 octobre 2006 à 16:58:30

          Citation : Robkya

          Oki ! Donc à ce que j'ai compris ça marchera très bien si je mets :


          int main()
          {
          }



          Ça dépend si tu as besoin des arguments de la ligne de commande...

          sinon:
          oui ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            13 octobre 2006 à 17:17:15

            Je tiens à préciser que le SDL demande le prototype int main(int argc, char **argv), donc ça marche pas pour tous les exemples du tutos de M@teo21 l'autre prototype.

            Il y a une histoire d'alias ... enfin j'en sais pas plus.

            Duarna
            • Partager sur Facebook
            • Partager sur Twitter

            2 petites questions...

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown