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 :

Fonction et préprocesseur


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut Fonction et préprocesseur
    Bonjour,

    1) J'utilise, dans un programme, la fonction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char *putBeginningSequence(char* basis, char* s) {
     
      char* char_tmp;
     
      for (int i = 0; i < BEGINNING_SIZE; i++) {
        *char_tmp = basis[i];
        strcat(s, char_tmp);
      }
     
      return s;
     
    }
    , où j'ai préalablement inclus, dans les directives préprocesseur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define BEGINNING_SIZE 3;
    . Seulement, je reçois, à la compilation:
    error: expected expression before ‘;’ token, pour la ligne où se situe le for.

    Pourquoi? Comment y remédier?

    2) De plus, j'ai déclaré une autre fonction comme étant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *putRandomizeSequence(char*, char*, int, char*);
    , et je l'appelle à un moment par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    putRandomizeSequence(basis, argv, k, s);
    , où ma fonction main est donnée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char* argv[]){ // ... }
    . Pourquoi reçois-je l'erreur warning: passing argument 2 of ‘putRandomizeSequence’ from incompatible pointer type? En effet, je voulais simplement passer un pointeur vers le tableau des paramètres donnés dans le bash...

    Comment y remédier?


    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Par défaut
    Salut,

    Première chose, pas de ";" quand tu fais un define.

    Ensuite argv est un double pointeur et toi as déclarer dans ta fonction qu'un simple pointeur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    En effet, faute d'inattention pour les define.

    Par contre, pour argv, êtes-vous sûr? En effet, il me semble qu'il y a beaucoup de discussions à ce sujet.

  4. #4
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Je crois que de toute façon si tu ne met pas explicitement "int argc, char** argv" le compilateur le rajoutera de lui même.
    Mais tu demande en paramètre un char* (chaine de caractere) alors que le main te fourni un char** ( un "tableau" de chaine de caractère)
    Change ton 2ème paramètre en char**

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Je crois que de toute façon si tu ne met pas explicitement "int argc, char** argv" le compilateur le rajoutera de lui même.
    Non
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Encore une connerie d'appris en cours ^^

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    Merci. Ca n'empêche que, maintenant, je reçois, pour la ligne où se situe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char** argv[]){
    , le warning suivant: warning: second argument of ‘main’ should be ‘char **’. C'est normal?

    Merci.

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par lucaordi Voir le message
    Merci. Ca n'empêche que, maintenant, je reçois, pour la ligne où se situe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char** argv[]){
    , le warning suivant: warning: second argument of ‘main’ should be ‘char **’. C'est normal?

    Merci.
    Oui, il faut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(int argc, char *argv[])
     
    /* ou */
     
    int main(int argc, char **argv)
    qui sont deux formes strictement équivalentes.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    Merci.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/03/2007, 02h01
  2. fonction eval en C et préprocesseur ?
    Par ramislebob dans le forum C
    Réponses: 5
    Dernier message: 13/09/2006, 19h55
  3. Réponses: 4
    Dernier message: 13/07/2004, 18h59
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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