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 :

Un compilateur C++ compile-t-il du C sans broncher ? [nouvelle FAQ?]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut Un compilateur C++ compile-t-il du C sans broncher ? [nouvelle FAQ?]
    J'ai parcouru (peut-être trop rapidement) la FAQ mais n'ai pas trouvé de réponse à ma question du coup me voila :

    un compilateur c++ compile t il du c sans broncher ?

    ou plus précisément :

    Est-ce que je peux prendre n'importe quel source c inclure son entête dans mon fichier source et le donner a g++ ?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par BaygonV Voir le message
    J'ai parcouru (peut-être trop rapidement) la FAQ mais n'ai pas trouvé de réponse à ma question du coup me voila :

    un compilateur c++ compile t il du c sans broncher ?

    ou plus précisément :

    Est-ce que je peux prendre n'importe quel source c inclure son entête dans mon fichier source et le donner a g++ ?
    C peut être considéré comme un "subset" de C++.

    A priori, C++ peut parfaitement (bien que ce soit déconseillé) utiliser exactement les même fichiers d'en-têtes que C. Ce qu'il fait d'ailleurs -- bien que les ayant inclus dans des fichiers qui porte des noms plus en rapport avec la convention pour le standard de C++ -- avec des fichiers comme cstddef, cstring, cassert, et autres.

    Cependant, il y a quelques "incompatibilités" entre certaines fonctionnalités de C et les fonctionnalités similaires en C++. La raison de ces incompatibilités est souvent la même : C++ est beaucoup plus attentif au respect des types que C.

    Une des incompatibilité les plus connues concerne les fonctions malloc et similaires.

    En C, tu peux très bien écrire un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnType * ptr = malloc(sizeof(UnType));
    alors que, comme malloc renvoie un void *, il faut explicitement le convertir dans un pointeur du type adéquat en C++. Cela prendrait la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnType * ptr = (UnType*) malloc(sizeof(UnType)); // on utilise souvent le cast "C style" pour y arriver
    Notes d'ailleurs que ce code restera tout à fait légal en C .

    Il y a d'autres incompatibilités du même style, dont certaines sont simplement dues à des incompatibilités entre la norme C90 et la norme C99, mais, de manière générale, un code C peut effectivement être compilé "presque sans rien changer" avec un compilateur C++
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Généralement pour ce qui est des en-têtes, il est très facile d'écrire un fichier d'en-tête dans le subset commun aux langages C et C++ (notamment en utilisant une macro pour régler le problème du extern "C").

    C'est plus difficile pour un fichier source, notamment parce que l'incompatibilité de malloc() est l'écriture recommandée en C pour cet appel.

    Est-ce que je peux prendre n'importe quel source c inclure son entête dans mon fichier source et le donner a g++ ?
    En terme général, je dirais que la réponse est non. Si le fichier n'a pas été explicitement prévu pour être compilé dans les deux langages, le fichier source .c compilé en C++ causera des erreurs de compilation; et s'il est compilé en C, le fichier d'en-tête, bien que ne causant aucune erreur de compilation, causera des erreurs d'édition de lien (à moins d'entourer son inclusion d'un bloc extern "C" {}, ce qui ne marchera pas toujours).
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 142
    Par défaut
    Ok, merci je comprends le principe.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  2. Comment compiler avec javac des jar sans utiliser -cp
    Par Battosaiii dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2006, 17h03
  3. Compiler le compilateur de cobol
    Par elekis dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 03/12/2004, 10h45
  4. [Compilateur]Option de compil
    Par Guybrush dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/09/2004, 11h22
  5. [compilateur] Compilation en lignes d'un projet
    Par SpirouF40 dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/11/2002, 12h43

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