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 :

Tiret dans les noms de fonctions


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Par défaut Tiret dans les noms de fonctions
    Bonjour,

    Voila, je suis confronté a un phénomène que je n'arrive pas à expliquer.
    lors de l'appel d'un fonction dont le nom comporte un tiret il m'est impossible de compiler.

    Exemple :
    header : text.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <stdio.h>
     
    void text-t( char * s );
    fonction : text.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include "text.h"
     
    void text-t( char * s ){
            printf ("%s\n",s);
    }
    enfin le main.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "text.h"
     
    int main(){
            text-t("test\n");
            return 0;
    }
    en lançant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    gcc main.c text.c text.h -o dash
     
    In file included from main.c:1:
    text.h:3: error: parse error before '-' token
    main.c: In function `main':
    main.c:4: error: `text' undeclared (first use in this function)
    main.c:4: error: (Each undeclared identifier is reported only once
    main.c:4: error: for each function it appears in.)
    In file included from text.c:1:
    text.h:3: error: parse error before '-' token
    text.c:3: error: parse error before '-' token
    text.h:3: error: parse error before '-' token
    gcc m'insulte ! alors que la même version en remplaçant "text-t" par "text" par exemple compile et fonctionne.
    Si vous avez une explication je suis preneur.

  2. #2
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    Les noms de fonctions en C ne peuvent contenir si je me rappelle bien que des chiffres, lettres et les caractères "_" et "&". De plus, elle doit commencer par une lettre et est sensible à la casse.
    Le tiret ne peut donc pas être utilisé. Remplace le par un "_" par exemple.

  3. #3
    Membre émérite 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
    Par défaut
    Citation Envoyé par Beniou Voir le message
    Bonjour,

    Les noms de fonctions en C ne peuvent contenir si je me rappelle bien que des chiffres, lettres et les caractères "_" et "&". De plus, elle doit commencer par une lettre et est sensible à la casse.
    Non pas de &.

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Par défaut
    Merci pour vos réponses rapides,
    Mais avez vous des références l'indiquant,( C'est dans la norme C ? ) parce que je cherche plus l'explication que faire fonctionner mon code ( sachant comment contourner le problème ).

  5. #5
    Membre émérite 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
    Par défaut
    Oui c'est dans la norme :
    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
    25
    26
    27
    28
    29
    30
    31
    32
      6.4.2 Identifiers
      6.4.2.1 General
      Syntax
    1         identifier:
                      identifier-nondigit
                      identifier identifier-nondigit
                      identifier digit
              identifier-nondigit:
                      nondigit
                      universal-character-name
                      other implementation-defined characters
              nondigit: one of
                      _ a b        c    d   e    f   g   h   i    j   k     l   m
                          n o      p    q   r    s   t   u   v    w   x     y   z
                          A B      C    D   E    F   G   H   I    J   K     L   M
                          N O      P    Q   R    S   T   U   V    W   X     Y   Z
              digit: one of
                      0 1      2   3    4   5    6   7   8   9
      Semantics
    2 An identifier is a sequence of nondigit characters (including the underscore _, the
      lowercase and uppercase Latin letters, and other characters) and digits, which designates
      one or more entities as described in 6.2.1. Lowercase and uppercase letters are distinct.
      There is no specific limit on the maximum length of an identifier.
    3 Each universal character name in an identifier shall designate a character whose encoding
      in ISO/IEC 10646 falls into one of the ranges specified in annex D.62) The initial
      character shall not be a universal character name designating a digit. An implementation
      may allow multibyte characters that are not part of the basic source character set to
      appear in identifiers; which characters and their correspondence to universal character
      names is implementation-defined.
    4 When preprocessing tokens are converted to tokens during translation phase 7, if a
      preprocessing token could be converted to either a keyword or an identifier, it is converted
      to a keyword.

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par mrshapiro Voir le message
    Merci pour vos réponses rapides,
    Mais avez vous des références l'indiquant,( C'est dans la norme C ? ) parce que je cherche plus l'explication que faire fonctionner mon code ( sachant comment contourner le problème ).
    Evidemment que c'est dans la norme. Paragraphe 6.4.2 ("Identifiers"). Il existe un lien pour télécharger la dernière norme du C dans la FAQ et dans l'index du forum C.

  7. #7
    Membre émérite 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
    Par défaut
    Juste pour remettre les choses dans leur contexte, le passage que je viens de citer est tiré de ISO/IEC 9899:TC3, il autorise des identifiants comportant des caractères (ISO/IEC 10646) autres que ASCII.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 16
    Par défaut
    Complément :
    Ce qui est normal car le signe "-" correspond à un "moins".
    Ton compilo te jette parce que pour lui tu essaies de faire une soustraction entre une variable "text" et une fonction "t()" et aucun des deux n'a été déclaré (et ce n'est pas ton but).

    Règle sur les noms de variable :
    - Peut contenir n'importe quel lettre de l'alaphabet sans accent, minuscule ou majuscule.
    - Peut contenir n'importe quel chiffre.
    - Peut contenir le caractère '_'.
    - Sensible à la casse.
    - Commence toujours par une lettre ou le caractère '_'.

    Petit bonus pour plus de lisibilité : afin de pouvoir distinguer les variables globales, certains programmeurs n'utilise le '_' en début de nom de variable uniquement pour les variables globales.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/06/2012, 10h34
  2. [Oracle / Nom de schema] Tiret dans un nom de schema
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 23/03/2006, 16h43
  3. Espace dans les arguments de fonction
    Par black is beautiful dans le forum Windows
    Réponses: 2
    Dernier message: 11/03/2006, 12h06
  4. Smbclient et espace dans les noms
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 4
    Dernier message: 30/11/2005, 18h29
  5. [XML] Accent dans les noms de balises
    Par virgul dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 09/03/2005, 13h42

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