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 :

Quelques précisions. . .


Sujet :

C

  1. #1
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut Quelques précisions. . .
    Bonjour,

    J'apprends en ce moment le C, et j'adore coder et tout le reste . . .
    Cependant, j'aimerais que l'on m'apporte certaines précisions, car j'admet être un peu perdu.

    Voici ce que je voudrais savoir -> :

    1) J'ai récemment vu un exemple de source en C, et j'y ai noté quelque chose. De cet exemple, j'ai sauté à une conslusion : Lorsque l'on communique entre fonctions, la fonction appelée ne peut modifier une variable de la fonction appelante. Toutefois, cette règle ne s'applique pas pour les tableaux.
    À titre d'exemple :
    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
     
    #include <stdio.h>
     
    void copy(char from[], char to[]);
     
    int main(void) {
    	char devon[6];
    	char shire[6];
    	devon[0]='h';
    	devon[1]='e';
    	devon[2]='l';
    	devon[3]='l';
    	devon[4]='o';
    	devon[5]='\0';
    	copy(devon, shire);
    	printf("%s\n", shire);
    	return 0;
    }
     
    void copy(char from[], char to[]) {
    	int i;
    	for (i = 0; i <= 5; ++i)
    		to[i] = from[i];
    }
    Lorsque l'on appelle copy(devon, shire), from[] et to[] se trouvent à opérer directement sur devon et shire.

    Es-ce exact???

    2) '\0' doit être présent dans un tableau de caractères, car il indique la fin de ce tableau.

    3) On peut déclarer un tableau sans spécifier sa taille seulement dans une déclaration d'argument propre à une fonction.

    Par exemple, si c'est exact, je ne pourrais faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdio.h>
     
    int main(void) {
        char devon[];
        int shire[];
     
        . . .
     
    }

    Voilà, ce ne sont que de simple questions afin de m'assurer que je ne me trompe pas. Si vous pouviez me donner vos réponses en spécifiant le numéro de la question correspondante, j'en serais enchanté, simplement pour plus de clarté.

    Sincèrement,

    Array

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Citation Envoyé par Array
    1) J'ai récemment vu un exemple de source en C, et j'y ai noté quelque chose. De cet exemple, j'ai sauté à une conslusion : Lorsque l'on communique entre fonctions, la fonction appelée ne peut modifier une variable de la fonction appelante. Toutefois, cette règle ne s'applique pas pour les tableaux.
    La différence entre les tableaux et les valeurs normales, c'est que les tableaux ne sont jamais copié contrairement aux autres valeurs, on transmet l'adresse du premier élément ce qui fait qu'une fonction agit directement sur le tableau et non pas sur une copie. Cela correspond à modifier les données pointées par un pointeur passé en paramètre. Le pointeur étant une variable "normale" sa valeur est copiée dans l'espace mémoire de la fonction appelée, mais comme deux pointeurs ayant la même valeur pointent sur le même espace, l'espace pointée peut-être modifiée par la fonction appelée et les modifications seront visible dans la fonction appelante.

    Citation Envoyé par Array
    2) '\0' doit être présent dans un tableau de caractères, car il indique la fin de ce tableau.
    Pas exactement, en fait '\0' correspond au caractère final d'une chaîne de caractère C, le tableau peut faire 800 caractères, si le 5ème caractères et un '\0', alors la chaîne ne fait que 4 caractères (le caractère NUL n'est pas comptée).

    Citation Envoyé par Array
    3) On peut déclarer un tableau sans spécifier sa taille seulement dans une déclaration d'argument propre à une fonction.
    Oui, mais à condition de l'initialiser, ce que tu mets dans tes exemples est faux et risque de se retourner contre toi. En revanche, si tu écris ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int monTableau[] = {5, 10, 15, 0, 2, 4};
    Alors le compilateur créera un tableau de taille 6 et y mettra les valeurs que tu indiques. De même, si tu écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char maChaine[] = "awezgaga";
    Tu auras un tableau de char de longueur 9, c'est-à-dire 8 caractères imprimables + le caractère NUL final. Mais ceci :

    a sans doute un comportement indéfini, et les comportements indéfinis sont à fuir comme la peste...

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,
    Lorsque l'on communique entre fonctions, la fonction appelée ne peut modifier une variable de la fonction appelante. Toutefois, cette règle ne s'applique pas pour les tableaux.
    -Pas tout a fait la fonction appelée peut changer une variable de la fonction appelante dans les cas suivants :
    *la variable est passée en paramètre (passage par adresse)
    *la variable est déclarée comme variable générale
    -Pour ce qui est des tableaux leurs noms désigne l'adresse de la première case
    TAB=&TAB[0] ,donc quand tu écrit : copy(char from[], char to[]) from et to sont passées par adresse .
    REMARQUE :
    devon[0]='h';
    devon[1]='e';
    devon[2]='l';
    devon[3]='l';
    devon[4]='o';
    devon[5]='\0';
    Peut être remplacer simplement par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      devon[6]="hello";   /*le '\0' est ajouté par défaut*/
    2) '\0' doit être présent dans un tableau de caractères, car il indique la fin de ce tableau.
    Exact...
    #include <stdio.h>

    int main(void) {
    char devon[];
    int shire[];

    . . .

    }
    Je craint que ceci soit faux ,mais ton compilateur te le dira de toute facon essaye de le compiler ce sera la meilleurs des réponses .
    Voila j'espère avoir répondu a tes question je débute en C aussi donc il se peut que je dise des bêtises

  4. #4
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Ah, je vous remercie. J'y vois plus lucidement.

    Cependant, à la question 3, j'aimerais simplement avoir une précision :

    Voici deux exemples :

    Ex.1.:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    int main(void) {
    int array[];
     
    . . .
     
    }
    Ex.2.:
    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
    #include <stdio.h>
     
    int newfunc(char fmaintab[], char regdb[]);
     
    int main(void) {
     
    . . .
     
    }
     
    int newfunc(char fmaintab[], char regdb[]) {
     
    . . .
     
    }
    Le compilateur GCC acceptera l'exemple #2, cependant, il refusera le #1.
    C'est pour cela que je demandais si la déclaration de tableaux sans définition de sa taille était uniquement autorisée pour les arguments de fonctions.

    Pourquoi GCC refuse le premier exemple, mais acccepte le deuxième!?

  5. #5
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    peut etre qu'il aurait fallu ajouter une ou deux lignes dans ton exemple de code pour que tu puises comprendre :
    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
    #include <stdio.h>
     
    int newfunc(char fmaintab[], char regdb[]);
     
    int main(void) {
     
     char C_fmaintab[10] , C_regdb[5];
     newfunc(C_fmaintab , C_regdb);
    . . . 
    }
     
    int newfunc(char fmaintab[], char regdb[]) {
     
    . . .
     
    }
    La je pense que c'est un peu plus clairs la taille de fmaintab sera 10 et celle de regdb sera 5, donc pas besoin de la définir ... tu pourra écrire ce que bon te semble le compilateur ne prendra en charge que la taille déclarer ...
    ceci ne sert a rien :
    int newfunc(char fmaintab[10], char regdb[5])
    int newfunc(char fmaintab[6899], char regdb[8])
    encore une fois essaye de compiler pour voir le résultats .

  6. #6
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Non, bien entendu, j'avais du code . . .
    Je suis conscient que le compilateur aurait fait une erreur à cause d'une fonction main() totalement vide.



    Bon... reprenons devonshire :

    Ex.1.:
    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
     
    #include <stdio.h>
     
    void copy(char from[], char to[]);
     
    int main(void) {
    	char devon[];
    	char shire[];
    	devon[0]='h';
    	devon[1]='e';
    	devon[2]='l';
    	devon[3]='l';
    	devon[4]='o';
    	devon[5]='\0';
    	copy(devon, shire);
    	printf("Shire is \"%s\"\n", shire);
    	return 0;
    }
     
    void copy(char from[], char to[]) {
    	int i;
    	for (i = 0; i <= 5; ++i)
    		to[i] = from[i];
    }
    Ex.2.:
    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
     
    #include <stdio.h>
     
    void copy(char from[], char to[]);
     
    int main(void) {
    	char devon[6];
    	char shire[6];
    	devon[0]='h';
    	devon[1]='e';
    	devon[2]='l';
    	devon[3]='l';
    	devon[4]='o';
    	devon[5]='\0';
    	copy(devon, shire);
    	printf("Shire is \"%s\"\n", shire);
    	return 0;
    }
     
    void copy(char from[], char to[]) {
    	int i;
    	for (i = 0; i <= 5; ++i)
    		to[i] = from[i];
    }
    La compilation échoue à l'exemple #1 mais se déroule sans encombre pour l'exemple #2.

    Le erreurs reportées à l'exemple #1 :

    Citation Envoyé par compilateur_mingw

    devonshire.c:6: error: array size missing in 'devon'
    devonshire.c:7: error: array size missing in 'shire'
    Pourquoi accepte-t-il des tableaux avec taille inconnue dans les déclarations de fonctions et refuse de tels tableaux au sein des fonction!?

    MingW . . . GCC . . .

  7. #7
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Pourquoi accepte-t-il des tableaux avec taille inconnue dans les déclarations de fonctions et refuse de tels tableaux au sein des fonction!?
    Elle n'est pas inconnu puisque c'est celle des tableaux passés en arguments, suivant ton exemple la taille de from sera celle de devon et celle de to sera celle de shire .
    je ne sais pas si je me trompe mais je pense que lors du passage d'un tableaux il ni y'a que l'adresse du premier élément que tu fait passer (un pointeur) donc pas de nouvel espace alloué pour ce tableaux .
    Je suis conscient que le compilateur aurait fait une erreur à cause d'une fonction main() totalement vide.
    je n'ai pas parler de sa ...enfin bref

  8. #8
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par ssmario2
    Elle n'est pas inconnu puisque c'est celle des tableaux passés en arguments, suivant ton exemple la taille de from sera celle de devon et celle de to sera celle de shire .
    Oui, mais je ne crois pas que le compilateur le sache, lui.

    Regarde un autre exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
     
    int glops(int ghs[], char fgh[]);
     
    int main(void) {
    	int mainsys[];
    	printf("hello");
    }
     
    int glops(int ghs[], char fgh[]) {
    	printf("hello");
    }
    Lorsque je met int mainsys[]; ---> Erreur, mainsys[] a une taille inconnue!
    Lorsque j'enlève int mainsys[]; ---> Compilation réussie!

    Pourtant, comme tu le vois, ghs[] et fgh[], eux, ne sont pas à problèmes et possèdent une taille totalement inconnue.
    Peut-être est-ce que je me trompe . . . Il doit y avoir quelque chose qui m'échappe.

    Ce n'est pas vraiment de savoir pourquoi le compilateur me fait cela, mais ça me chicotte.

  9. #9
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Lorsque je met int mainsys[]; ---> Erreur, mainsys[] a une taille inconnue!
    Bon sa c'est régler on en reparle plus ...!!
    Pourtant, comme tu le vois, ghs[] et fgh[], eux, ne sont pas à problèmes et possèdent une taille totalement inconnue.
    Inconnue ou pas ton compilateur ne ta rien signaler simplement parce que ta fonction glops n'a jamais été compiler ....dans ton main il ni y'a aucun appelle a glops....!!

  10. #10
    Membre régulier Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    La fonction est quand même compilée, appellée ou pas -_-"
    Le compilo passe dans tous les fichiers qu'on lui indique et vérifie toutes les fonctions.

    Pourquoi est-ce que ca ne gène pas le compilo, dans une décla de fonction, c'est tout simple !
    Quand tu mets un int tab[], c'est comme si tu mettais un int *tab.
    Tu lui envoie l'adresse du premier argument de ton tableau, qui doit se terminer par '\0'

    Pourquoi aurait-il besoin de la taille ?

    Dans une fonction par contre, quand tu déclares un tableau, il y a deux manières de le faire. Si tu fais avec les crochets, la mémoire sera allouée au moment de la déclaration (à l'execution hein Il ne le fait pas à la compilation). Si le tu le fais avec une *, elle le sera plus tard dans la fonction, directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char *tab;
     
    /* Cas 1 : Allouée en entrant directement les valeurs*/
    tab = "Coucou c'est moi !"
     
    /* Cas 2 : Malloc ou strdup*/
    tab = malloc (sizeof(char) * 10);
    tab = strdup("Coucou c'est moi !")
    Dans les deux dernier cas, il faut penser à free.

    Je ne suis pas sûr à 100% de mon explication, n'ayant pas le temps de faire des recherches vérificatives, mais cela doit être à peu près ca...

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
     
    int main(void) {
    int array[];
     
    . . .
     
    }
    -Pas du C. Un tableau doit être défini avec une taille explicite ou une initialisation qui définisse sa taille implicitement. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(void) {
    int array[4];
     
    . . .
     
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(void) {
    int array[] = {4,6,2 0};
     
    . . .
     
    }
    La forme 'T id[]' utilisée comme paramètre de fonction est une autre forme de 'T *id'. C'est un pointeur et non un tableau.

    Tout cela est basique et expliqué dans ton livre de C qu'il ne faut pas hésiter à ouvrir et même à lire !

  12. #12
    Membre régulier Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    C'est ce que je voulais dire ^^
    Mais c'est plus clair dit comme ca

    /me va prendre des cours pour apprendre à expliquer simplement.

    Si tu as d'autres questions, n'hésite pas à fouiller ton livre de code puis à demander

  13. #13
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    La fonction est quand même compilée, appellée ou pas -_-"
    Le compilo passe dans tous les fichiers qu'on lui indique et vérifie toutes les fonctions.
    OUPS c'est totalement vrai ,j'eviterai de dire des bêtises la prochaine fois ....

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ssmario2
    OUPS c'est totalement vrai ,j'eviterai de dire des bêtises la prochaine fois ....
    Il se peut néanmoins que les fonctions 'static' non utilisées ne soient pas compilées, ni même vérifiées...

  15. #15
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Évidement que je lis mon livre! Mais les pointeurs ne sont traités qu'au chapitre 5, et je suis au chapitre 2.

    En théorie, j'aurais dû continuer à lire.
    Mais en pratique, cela m'intrigue à un point tel que cela en est insupportable.

    Je crois comprendre, bien que je n'ai pas encore été initié aux pointeurs.

    Citation Envoyé par moi
    En fait, comme ghs[] se trouve à être un pointeur dans la déclaration de fonction, il serait supposé de pointer vers un tableau qui lui a sa taille définie.
    C'est bien cela!?

    Si j'ai d'autres questions, je les posterai ici, afin de ne pas créer un nombre exagéré de sujets.


    Merci[]

  16. #16
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Re-bonjour,

    Je pose cette question car je n'ai pas encore vu de tel exemple dans mon livre :

    4) En C, peut-il y avoir des fonctions à l'intérieur d'une fonction!?

    Je crois qu'il esrait logique que oui, cependant . . .

    Merci,

    Array

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Euh... Si tu parles de définition de fonction dans une fonction genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int foo(int a)
    {
        char toto(void)
        {
            return 'a';
        }
        return toto();
    }
    Ça s'appelle des fonctions imbriquées ou nichées (en anglais nested fonction), et ce n'est permis à ma connaissance qu'en C99.

    Si tu parles d'appel de fonction, je vois pas pourquoi ça ne serait pas permis c'est ce qu'on fait sans arrêt

  18. #18
    Membre du Club Avatar de Array
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 210
    Points : 55
    Points
    55
    Par défaut
    Oui Oui, comme dans l'exemple que tu as mis.

    Cependant, si j'essaie, le compilateur m'écrit une erreur :

    undefined reference to 'function'


    Serais-ce une errur dans les prototypes de fonctions.

    Mon programme n'a aucune erreur lorsque je le compile sans avoir de fonction intégrée dans une fonction, mais aussitôt que j'intègre une fonction dans une fonction, ERROR!

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Je t'ai dit que les fonctions nichées ne sont pas autorisées en C ANSI ou en C89, elles ne le sont quand C99.

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Array
    Je pose cette question car je n'ai pas encore vu de tel exemple dans mon livre :

    4) En C, peut-il y avoir des fonctions à l'intérieur d'une fonction!?
    Non.

    C != Pascal.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/12/2007, 19h44
  2. Entrées.. Sorties.. quelques précisions..
    Par Djef-69 dans le forum SL & STL
    Réponses: 2
    Dernier message: 28/11/2007, 23h16
  3. [Fabrique] Quelques Précisions
    Par djflex68 dans le forum Design Patterns
    Réponses: 8
    Dernier message: 20/12/2006, 13h34
  4. Quelques "précisions" sur Struts
    Par Atma_ dans le forum Struts 1
    Réponses: 19
    Dernier message: 03/11/2006, 15h20

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