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 :

Concatenation String et entier


Sujet :

C

  1. #81
    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 Jean-Marc.Bourguet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main() {
       return 0;
    }
    est a mon sens un programme strictement conforme.

    Le traitement d'une liste de parametre vide est different dans le cas d'une declaration et d'une definition. Dans le cas d'une definition de fonction, ca indique que la fonction ne prend pas de parametres et est equivalent a (void); il n'y a pas de raison que main soit traite de maniere differente. Dans le cas d'une declaration, ca indique que le nombre et le type des parametres n'est pas specifie.
    OK, merci! C'est une manière défendable d'interpréter la norme.

    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++

    +

  2. #82
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main() {
       return 0;
    }
    est a mon sens un programme strictement conforme.

    Le traitement d'une liste de parametre vide est different dans le cas d'une declaration et d'une definition. Dans le cas d'une definition de fonction, ca indique que la fonction ne prend pas de parametres et est equivalent a (void); il n'y a pas de raison que main soit traite de maniere differente. Dans le cas d'une declaration, ca indique que le nombre et le type des parametres n'est pas specifie.
    Et si la définition sert aussi de déclaration, comme c'est le plus souvent le cas pour main()?

  3. #83
    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 stephl
    Et si la définition sert aussi de déclaration, comme c'est le plus souvent le cas pour main()?
    Pour moi, le fait que int main() soit interprété, dans une définition de fonction, comme une fonction ne prenant aucun paramètre relève d'un soucis de compatibilité avec le code pre-ANSI. Cette syntaxe ne permet pas de la déclarer sous la forme d'un prototype. Mais comme main() n'est jamais appelé autrement que comme point d'entrée du programme... Mais je me range à l'avis de Jean-Marc Bourguet qui est bien plus expérimenté que moi.

    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++

    +

  4. #84
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par stephl
    Et si la définition sert aussi de déclaration, comme c'est le plus souvent le cas pour main()?
    Toute definition est une declaration (eventuellement redondante)... donc s'il y a une difference entre definition et declaration elle vaut pour la definition implicite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main();
    int main() {
       return 0;
    }
    est toujours conforme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main();
    void f() {
       main();
    }
    int main() {
       ...
    }
    L'est aussi. Mais ceci ne l'est plus meme si aucune erreur n'est exigee par la norme car l'appel a main() n'a pas les bons parametres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main();
    void f() {
       main();
    }
    int main(int argc, char* argv[]) {
       ...
    }

  5. #85
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    OK, merci pour ces précisions; en revanche, j'aurais plutôt écrit "toute définition est une déclaration".

  6. #86
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par stephl
    OK, merci pour ces précisions; en revanche, j'aurais plutôt écrit "toute définition est une déclaration".
    Tu as raison (je corrige).

  7. #87
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Tu as raison (je corrige).
    OK, vous me rassurez. Je croyais ne plus rien comprendre !

  8. #88
    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 Jean-Marc.Bourguet
    Toute definition est une declaration (eventuellement redondante)... donc s'il y a une difference entre definition et declaration elle vaut pour la definition implicite.

    [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main();
    int main() {
       return 0;
    }
    est toujours conforme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main();
    void f() {
       main();
    }
    int main() {
       ...
    }
    L'est aussi. Mais ceci ne l'est plus meme si aucune erreur n'est exigee par la norme car l'appel a main() n'a pas les bons parametres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main();
    void f() {
       main();
    }
    int main(int argc, char* argv[]) {
       ...
    }
    Je n'obtiens aucune erreur, mais comme tu le dis, ce n'est pas requis par la norme. Toutefois, je ne comprends pas en quoi les cas présentés sont différents du point de vue de la conformité.

    Qu'en est-il de?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main();
    void f()
    {
        main();
    }
     
    int main(void)
    {
       ...
    }
    Dans tous les cas, la déclaration int main(); ne spécifie ni le nombre ni le type des paramètres.

    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. #89
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par mujigka
    Je n'obtiens aucune erreur, mais comme tu le dis, ce n'est pas requis par la norme. Toutefois, je ne comprends pas en quoi les cas présentés sont différents du point de vue de la conformité.
    Le cas qui n'est pas conforme appelle main sans parametres mais defini main avec des parametres.
    Qu'en est-il de?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main();
    void f()
    {
        main();
    }
     
    int main(void)
    {
       ...
    }
    Conforme
    Dans tous les cas, la déclaration int main(); ne spécifie ni le nombre ni le type des paramètres.
    Et dans ce cas, il faut que l'utilisation corresponde a la definition. Plus quelques petites subtilites a cause des promotions qui ont lieu quand on n'a pas specifie le nombre et le type des parametres. Par exemple il est impossible d'appeler de maniere conforme une fonction definie int f(char c) {...} si on n'a pas de declaration ou qu'une declaration int f() parce que les char sont promus en int sauf si une declaration indiquant qu'il faut bien un char est visible.

  10. #90
    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 Jean-Marc.Bourguet
    Le cas qui n'est pas conforme appelle main sans parametres mais defini main avec des parametres.

    Conforme


    Et dans ce cas, il faut que l'utilisation corresponde a la definition. Plus quelques petites subtilites a cause des promotions qui ont lieu quand on n'a pas specifie le nombre et le type des parametres. Par exemple il est impossible d'appeler de maniere conforme une fonction definie int f(char c) {...} si on n'a pas de declaration ou qu'une declaration int f() parce que les char sont promus en int sauf si une declaration indiquant qu'il faut bien un char est visible.
    Il faut m'expliquer longtemps, mais je commence à comprendre. Merci pour tout!

    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++

    +

Discussions similaires

  1. [c#] convertion string et entier
    Par zidenne dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/09/2006, 11h31
  2. string en entier et entier en string
    Par mathher dans le forum C++
    Réponses: 2
    Dernier message: 14/04/2006, 12h11
  3. Concatenation de 2 entiers en SQL (sous SQL Server)
    Par emazes dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/08/2005, 09h28
  4. [Débutant(e)]convertir un string en entier
    Par harris_macken dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2005, 07h20
  5. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33

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