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 :

Est-il normal que mon header ne soit pas indispensable?!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Par défaut Est-il normal que mon header ne soit pas indispensable?!
    Salut,
    J'ai bien compris le principe de la programmation modulaire comme telle:
    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
    /* main.c */
    #include "hello.h"
    int main (void)
    {
       hello ();
       return 0;
    }
           
    /* hello.h */
    #ifndef H_HELLO
    #define H_HELLO
    void hello (void);
    #endif /* guard */
    
    /* hello.c */
    #include "hello.h"
    #include <stdio.h>
    void hello (void)
    {
       puts ("Hello world!");
    }
    mais je ne comprends pas pourquoi cela marche quand même sans le fichier .h (ou de manière équivalente si je met les #include "hello.h" en comentaires).
    On dit partout que c'est la bonne manière d'organiser ses fichiers, mais pourquoi mon .h semble être facultatif??! Est-il obligatoire finalement?
    Merci d'avance,
    @+

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par makro Voir le message
    mais je ne comprends pas pourquoi cela marche quand même sans le fichier .h (ou de manière équivalente si je met les #include "hello.h" en comentaires).
    On dit partout que c'est la bonne manière d'organiser ses fichiers, mais pourquoi mon .h semble être facultatif??! Est-il obligatoire finalement?
    Merci d'avance,
    @+
    Non, ce n'est pas obligatoire.

    1 - tu pourrais fournir le prototype 'a la main', mais la maintenance deviendrait cauchemardesque
    2 - tu pourrais ne pas fournir de prototype, et dans ce cas, ça pourrait fonctionner (ou non, tout dépend des types), mais tu prives le compilateur des éléments indispensables qui lui permettent de coder l'appel correctement et de vérifier la cohérence des appels.

    Il existe 40.000 façons de se tirer une balle dans le pied en C. Nous nous efforçons de promouvoir les quelques Bonnes Pratiques qui évitent ça.

    Donc le mécanisme que tu as décrit est fortement encouragé pour ne pas dire obligatoire, du moins vu des Règles de Bonnes Pratiques.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Par défaut
    Merci pour ta réponse, j'en prends bonne note.

  4. #4
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut
    Ça m'arrive souvent sous code::blocks (implicite declaration of ..... ) et sous visual si il manque quoi que se soit il compile pas .

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par elmcherqui Voir le message
    Ça m'arrive souvent sous code::blocks (implicite declaration of ..... ) et sous visual si il manque quoi que se soit il compile pas .
    Ça, c'est parce que tu compiles en C++... Caÿ mal.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    D'ailleurs , pour éviter les balles dans le pied , on active les warnings , et aussi on respecte la norme. ( Certain mettront les warning en erreurs ... mais ça peut être excessifs ( enfin ça dépend du cas ) )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/09/2014, 09h48
  2. Réponses: 2
    Dernier message: 24/01/2013, 15h31
  3. Réponses: 8
    Dernier message: 20/04/2012, 22h37
  4. Est-ce normal dans mon grub?
    Par Jean-Michel Ormes dans le forum Ubuntu
    Réponses: 14
    Dernier message: 30/06/2008, 21h27
  5. est ce normal que le module NET::FTP soit TRES lent ?
    Par ramislebob dans le forum Modules
    Réponses: 4
    Dernier message: 14/03/2006, 09h13

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