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 :

comment remplacer la fonction main par une autre fonction nommée f3


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 12
    Points : 10
    Points
    10
    Par défaut comment remplacer la fonction main par une autre fonction nommée f3
    Bonjour a tous,

    mon problème est le suivant:

    j'ai trois fonctions f1, f2 et main contenu dans mon programme nommé file.c et je voudrais remplacer le main par une fonction f3 gardant le meme fonctionnement.
    parceque le code global dans lequel je vais integrer le fichier file.c contient déja une fonction main.

    l'exquisse de la prémière fonction f1 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned int f1(unsigned int indice,int nb)
    {
        return(p);
    }
    l'exquisse de la seconde fonction f2 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void f2(int r,unsigned int n,double **f,double **t)
    {
      j = f1 (i,r);
    }
    l'exquisse de la fonction main est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int main(int argc, char *argv[])
    {
      f2(a,b,tab1,tab2);
    }
    toute aide sera la bienvenue.
    merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Ce n'est pas clair ton truc:

    Soit:
    • Tu renommes ta fonction f3 par main, et main par ... main_old
    • Tu vas dans les propriétés de ton projet pour changer le point d'entrée par f3

  3. #3
    Membre à l'essai
    Homme Profil pro
    Etudiant chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par foetus Voir le message
    Ce n'est pas clair ton truc:

    Soit:
    • Tu renommes ta fonction f3 par main, et main par ... main_old
    • Tu vas dans les propriétés de ton projet pour changer le point d'entrée par f3
    le fonction f3 n'existe pas encore. c'est elle que je veux créer en remplacement de la fonction main puisque je vais appeler cette fonction f3 dans un plus gros projet qui contient déjà une fonction main .
    comment donc remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char *argv[])
    par une fonction f3.
    quel signature utiliser?

    merci bien

  4. #4
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par gys2015 Voir le message
    le fonction f3 n'existe pas encore. c'est elle que je veux créer en remplacement de la fonction main puisque je vais appeler cette fonction f3 dans un plus gros projet qui contient déjà une fonction main .
    comment donc remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char *argv[])
    par une fonction f3.
    quel signature utiliser?

    merci bien
    j'ai du mal a suivre aussi ..
    c'est simple ,tu change le nom de ton main par f3 , tu enlève tes argc/argv et les remplace poar tes futur arguments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int f3(int exemple, char *exemple2)
    {
      f2(a,b,tab1,tab2);
    }
    après tu n'oublie pas d'include ce fichier .c dans celui ou il y a ton main et ca ne devrait poser aucuns problèmes .

  5. #5
    Membre à l'essai
    Homme Profil pro
    Etudiant chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour a tous,

    j'ai pu utiliser la méthode de robun mais j'ai un problème de cast que je ne comprends pas.

    en fait je suis en train de travailler avec GTK3 et je creais une interface pour mon application.

    pour ma fonction f3, j'ai utilise ce prototype:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int f3(void)
    {
      -------
      -------
      --------
      exit(0);
    }
    exactement comme fonctionnait le main, donc j'ai juste changer l'entete. et voici comment je l'ai appellé dans cette fonction fftButton_clicked_cb:

    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
     
     
    void fftButton_clicked_cb (GtkButton *button, gpointer user_data){
     
    	GtkTextView* fftTextView = GTK_TEXT_VIEW(user_data);
    	GtkContainer* box3 = GTK_CONTAINER(gtk_widget_get_ancestor (GTK_WIDGET(fftTextView),GTK_TYPE_BOX));
    	GList* children = gtk_container_get_children(box3);	
    	GtkEntry* entry1 = GTK_ENTRY(children->data);
    	const gchar* filename = gtk_entry_get_text (entry1);
    	fprintf(stderr,"voila ca marche %s super",filename); //forcer l'affichage 
    	//TODO appelle a la fonction avec le nom du fichier choisi et 
    	//recuperation de la valeur de retour.
     
             int result = f3();
    	 char last_result = (char) result;
    	//maintenant affichons le resultat. 
    	GtkTextBuffer* buffer = gtk_text_view_get_buffer (fftTextView);
    	gtk_text_buffer_set_text (buffer,last_result,strlen(last_result));		
    }

    la compilation me renvoie cette erreur en soulignant la dernière ligne;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/kgyslain/latsa2016/src/event-handler.c:53:2: warning: passing argument 1 of ‘strlen’ makes pointer from integer without a cast [enabled by default]
    besoin d'aide svp.

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Qu'attend strlen ? Quel résultat est-elle sensée produire avec le paramètre que tu lui fournis ?

    Attention à la fonction f3 : l'appel final à exit va terminer le processus, tu dois utiliser return. D'une manière générale, utiliser exit pour autre chose que réagir à une erreur critique est une très mauvaise pratique (le int main() { /* ... */ exit(0); } j'ai jamais compris..).

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 433
    Points : 43 062
    Points
    43 062
    Par défaut
    strlen travaille sur une chaine, pas sur un char.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  8. #8
    Membre à l'essai
    Homme Profil pro
    Etudiant chercheur en informatique
    Inscrit en
    Mars 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant chercheur en informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2015
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    strlen travaille sur une chaine, pas sur un char.
    comment je vais alors gerer cette partie du code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
             int result = f3();  // recupere le resultat de la fonction f3
    	 char last_result = (char) result; // caster le resultat en une chaine
    	//maintenant affichons le resultat. 
    	GtkTextBuffer* buffer = gtk_text_view_get_buffer (fftTextView);
    	gtk_text_buffer_set_text (buffer,last_result,strlen(last_result));		
    }

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    En utilisant une vraie chaîne de caractères:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //En 64 bits, on a au maximum ⌈19.3⌉ = 20 chiffres (+ possible signe?) en non-signé,
    //Et  ⌈18.96⌉ = 19 chiffres + signe en signé, ce qui fait 21 (22?) caractères nécessaires dans un buffer.
    //Autant arrondir pour être sûr.
    #define BIG_ENOUGH 24
     
    	int result = f3();  // recupere le resultat de la fonction f3
    	char last_result[BIG_ENOUGH] = "";
    	sprintf(last_result, "%d", result); // convertir le resultat en une chaine
    	//maintenant affichons le resultat. 
    	GtkTextBuffer* buffer = gtk_text_view_get_buffer(fftTextView);
    	gtk_text_buffer_set_text (buffer,last_result, strlen(last_result));		
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    En utilisant une vraie chaîne de caractères:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	char last_result[20] = "";
    	sprintf(last_result, "%d", result); //  %s plutot , je ne crois pas que result soit un int
    On peut aussi faire :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	char *last_result = malloc(sizeof(char) * taille_chaine);
    last_result = "...";

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Wow, en seulement deux lignes, tu as réussi à causer une fuite de mémoire.
    (et franchement, pourquoi faire une allocation là où un buffer statique suffit? Par contre, pour être compatible avec un int de 64 bits, il faudrait que je réserve 21 caractères, plutôt que 20)

    PS:
    Citation Envoyé par awesomeman Voir le message
    // %s plutot , je ne crois pas que result soit un int
    C'est pourtant ce que dit le posteur originel:
    Citation Envoyé par gys2015 Voir le message
    int result = f3(); // recupere le resultat de la fonction f3
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Wow, en seulement deux lignes, tu as réussi à causer une fuite de mémoire.
    (et franchement, pourquoi faire une allocation là où un buffer statique suffit? Par contre, pour être compatible avec un int de 64 bits, il faudrait que je réserve 21 caractères, plutôt que 20)
    à part le fait que je ne free pas, d'où peut venir une fuite mémoire ??

    Citation Envoyé par Médinoc Voir le message
    PS:
    C'est pourtant ce que dit le posteur originel:
    En effet, j'ai parlé trop vite ..

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par awesomeman Voir le message
    à part le fait que je ne free pas, d'où peut venir une fuite mémoire ??
    J'ai probablement pris le last_result = "..."; un peu littéralement, mais cette ligne causait la fuite du pointeur précédemment alloué.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Python 2.X] Récupérer un fichier dans une fonction créée par une autre fonction
    Par nekcorp dans le forum Général Python
    Réponses: 2
    Dernier message: 04/04/2016, 11h31
  2. Réponses: 8
    Dernier message: 18/02/2016, 04h56
  3. On remplace le printf par une autre fonction
    Par chirazch dans le forum C++
    Réponses: 6
    Dernier message: 31/05/2013, 18h59
  4. Variable dans une fonction appelée par une autre fonction
    Par CyrilD dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2010, 13h42
  5. Réponses: 21
    Dernier message: 20/06/2006, 16h49

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