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 :

Interface graphique C ou C++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Interface graphique C ou C++
    Bonjour à toutes et à tous,

    Je vous écris ce message car je suis un peu perdu à vrai dire ... Je souhaite développer un logiciel avec interface graphique. On nous enseigne généralement à l'école que le mieux pour faire une interface graphique est le C++. Je l'avais donc pris pour acquis. Toutefois, préférant le C au C++ j'ai fais quelques petites recherches pour ce projet et je me suis aperçu qu'il existait des API en C pour programmer des interfaces graphiques (sur Visual Studio 2010 sur Windows je précise). D'après les diverses discussions que j'ai pu voir, j'aurais tendance à partir sur GTK+. Ma question est donc la suivante : Quelle est l'intérêt de programmer en C par rapport au C++ ? Dans quel cas je dois programmer en C et dans quel cas je dois programmer en C++ ? D'autant plus que j'ai parfois l'impression qu'on peut inclure du C dans du C++ même si généralement les programmeurs crient lorsque l'on dit ca ... Pourriez-vous m'orienter s'il vous plaît ? Me donner une raison peut-être est-ce dû à la portabilité du C par rapport au C++ ou ...
    Merci d'avance pour votre aide,

    Cordialement,
    esc39

    PS : je sais que cette discussion fait doublon avec elle poster sur le forum C mais je souhaiterais également avoir l'avis des experts en C++ ^^

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    PS : je sais que cette discussion fait doublon avec elle poster sur le forum C mais je souhaiterais également avoir l'avis des experts en C++ ^^
    C'est très bien, il faut avoir les 2 sons de cloches.

    On nous enseigne généralement à l'école que le mieux pour faire une interface graphique est le C++.
    C'est un peu du nimportenawak.

    Le fait de facilement faire une interface graphique, c'est l'existante de bibliothèques graphiques ou pas.
    Or C et C++ ne définissent pas de bibliothèques graphiques "standards", contrairement à bien des langages comme JAVA ou VB6.

    Il existe des bibliothèques graphiques aussi bien en C quand C++.
    Et, en tant que C++iste, je trouve les bibliothèques graphiques C++ plus "concises".

    L'avantage du C sur le C++, c'est que son interopérabilité, donc, il est possible (mais pas recommandé) de facilement utiliser une bibliothèque graphique C en C++.
    L'inverse, c'est beaucoup plus chaud (quasi rien de fiable et d'utile).

    (sur Visual Studio 2010 sur Windows je précise).
    Bin, désolé de te le dire mais Visual Studio, MSVC pour être précis, est un compilateur C++ et non C.
    Vous ne pourrez pas compiler du code C avec MSVC. En C, les VLA (Variable Length Arrays) sont autorisés et MSVC ne les supporte pas et ne les supportera jamais (l'équipe de VS a entériné qu'ils ne cherchent "que" la compatibilité avec les standards C++ et aucunement les standards C) .
    Mais vous pouvez utiliser les API C en C++ de manière presque transparente.

    j'aurais tendance à partir sur GTK+
    GTK+ a été implémenté en C, il dispose des connecteurs à toute une ribambelle de langage, donc le C++.

    Si c'est pour faire que du C++, GTK+ n'est pas forcement ce qu'il y a de plus "naturel".
    C'est plus pour des projets C ou multi-langages, car C++ dispose de bibliothèques graphiques nativement C++ et "portable" comme Qt.

    Quelle est l'intérêt de programmer en C par rapport au C++ ?
    Beaucoup de plate-forme, surtout dans l'embarqué, ne dispose pas de compilateur C++ (ou le constructeur le vend beaucoup plus cher).

    Dans quel cas je dois programmer en C
    Si vous devez faire des modules interopérables avec plusieurs langages et que vous ne connaissez pas toutes les subtilités du C++, par exemple.

    qu'on peut inclure du C dans du C++
    Non, mais on peut avoir du code qui ce compile aussi bien en C qu'en C++, car il utilise que les choses communes aux 2 langages.
    Le résultat de la compilation de ce même code par 2 compilateurs peut être très différent (même si le l'exécution est très souvent proche).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Tout d'abord merci beaucoup du temps passé et de toutes ces explications. Une autre question : on a tendance à nous vendre le C++ mieux que le C je suppose parce que c'est un langage de Programmation Orientée Objet mais est-ce si mieux que le C ? En terme de performance etc.

    Concernant Visual Studio je ne suis pas d'accord avec toi. Il est possible de définir son compilateur lorsque tu vas ici : Project Properties -> C/C++ -> Advanced -> Compile As -> C
    A moins que ce ne soit que illusoire ^^

    Une autre question revient donc : est-il possible de compiler du C avec un compilateur C sur MSVC ?
    Merci d'avance,

    Cordialement,
    esc39

  4. #4
    Membre du Club Avatar de no. 26
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 13
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par esc39 Voir le message
    Tout d'abord merci beaucoup du temps passé et de toutes ces explications. Une autre question : on a tendance à nous vendre le C++ mieux que le C je suppose parce que c'est un langage de Programmation Orientée Objet mais est-ce si mieux que le C ? En terme de performance etc.
    En terme de performance, le C++ est quasi comparable au C.

    Historiquement, le C++ n'est que du "C with class", c'est à dire du C sur lequel on a "greffé" un ensemble de mot clé permettant de réaliser de l'orienté objet. L'extension de cela est que le C++ intègre nativement toute les "features" du C, avec son lot de facilité et de mésalliance ( coucou les pointeurs ). De ce fait, on avait tendance à dire qu'un développeur C pouvait facilement faire du C++ car " c'est la même chose ".

    Par contre, avec l'arrivé du C++ moderne ( C++11 et plus ), la donne change. Il y a toute une pile de classe et d'élément qui ont fait leur arriver pour permettre une utilisation du C++ plus "orienté objet", et se détacher +/- complètement de ce qu'est le C.

    Le C et le C++ était à l'origine assez semblable dans la manière de travailler, mais ça c'était avant. Il n'y en a pas un qui est meilleure que l'autre, juste un langage plus adapté à réaliser un objectif que l'autre.

    Concernant Visual Studio je ne suis pas d'accord avec toi. Il est possible de définir son compilateur lorsque tu vas ici : Project Properties -> C/C++ -> Advanced -> Compile As -> C
    A moins que ce ne soit que illusoire ^^
    Ça l'est. Un compilateur C++ est tout à fait capable de compiler un code C. La syntaxe du C et du C++ sont assez similaire. Un compilateur C++ connaît toute la syntaxe du langage C. Ce qui va changer c'est le fait de compiler vers une cible "C++" ou vers une cible "C". Sans rentrer dans le détail, le fait de compiler vers une cible C++ va forcer le compilateur à créer de nouvelle structure (pour supporter l'orienté objet, ce genre de chose).

    Une autre question revient donc : est-il possible de compiler du C avec un compilateur C sur MSVC ?
    Merci d'avance,
    Cordialement,
    esc39
    Oui. Il n'existe pas de compilateur C attitré fournit par Microsoft. Il propose un compilateur C++ qui, par extension, peut compiler vers du C.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    - VS est un IDE, tu peux mettre le compilo de ton choix en modifiant les paramètres de ton projet
    - le compilo par défaut, msvc, est C++
    - le C est en gros un sous-ensembles du C++, tant que tu n'utilises pas de fioritures (coucou les VLA), tu peux inclure du C dans du code C++, il sera compilé
    - la POO est tout autant possible en C, class et héritage ne définissent pas POO
    - on ne va pas refaire le débat C vs C++, je te laisse googler les millions de résultats à ce sujet
    - le choix du langage est ton choix
    - tu trouveras des lib graphiques en C comme en C++
    - les performances à code équivalent sont équivalentes, les pertes de performances de l'un ou l'autre viennent d'une mauvaise utilisation (dynamic_cast, virtual dans tous les sens, ...), sans parler des mauvais algorithmes
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    Concernant Visual Studio je ne suis pas d'accord avec toi. Il est possible de définir son compilateur lorsque tu vas ici : Project Properties -> C/C++ -> Advanced -> Compile As -> C
    A moins que ce ne soit que illusoire ^^
    https://visualstudio.uservoice.com/f...23-c99-support
    https://herbsutter.com/2012/05/03/re...ut-vc-and-c99/
    T'as plus qu'à tester un VLA (norme C99) dans un code "C" avec MSVC, pour voir.

    on a tendance à nous vendre le C++ mieux que le C je suppose parce que c'est un langage de Programmation Orientée Objet
    C++ est multi-paradigme (procédurale (oui JAVA est POO mais pas procédural), POO, fonctionnel, générique et peut-être encode d'autre).

    mais est-ce si mieux que le C ? En terme de performance etc.
    Je crois que @Bousk a bien répondu à cela.

    est-il possible de compiler du C avec un compilateur C sur MSVC ?
    Qui n'existe pas LOL.

    Par contre, avec l'arrivé du C++ moderne ( C++11 et plus ), la donne change.
    LOL, la tronche du compilateur C quand il se prend une classe ou un template dans les dents. (même "struct" C++ ne passe pas dans du C, et cela même avant 1990).

    Ça l'est. Un compilateur C++ est tout à fait capable de compiler un code C.
    Non, cf. la documentation des compilateurs C++ les plus courant donc aucun ne support le STANDARD C99.
    Sinon, à ce prix là, un compilateur C++ est capable de compiler du JAVA, du moment que le code n'utilise pas les fonctionnalités spécifiques JAVA.

    La syntaxe du C et du C++ sont assez similaire.
    Aussi similaire que JAVA et C#.

    Un compilateur C++ connaît toute la syntaxe du langage C.
    BIN NON, C99 etc... et comment une struct est interprétée ? à la C ou à la C++ ???

    c'est le fait de compiler vers une cible "C++" ou vers une cible "C"
    La cible d'un compilateur, c'est un code binaire, pour la plateforme cible, pas un langage.

    Sans rentrer dans le détail, le fait de compiler vers une cible C++ va forcer le compilateur à créer de nouvelle structure (pour supporter l'orienté objet, ce genre de chose).
    Moi, j'aimerai que tu entres dans les détails, parce que le "Hello Word" en C ou en C++, il n'y pas de "nouvelle structure" dans la version C++. (Le RTTI, c'est pas de base en C++).
    C'est le genre d'argument complètement foireux qu'il faut arrêter de propager.

    Il propose un compilateur C++ qui, par extension, peut compiler vers du C.
    Non, la cible d'un compilateur n'est pas un langage, bordel.

    EN RESUME, LE C ET LE C++, C'EST PAS PAREIL !!!

    tu peux inclure du C dans du code C++, il sera compilé
    Comme on peut aussi inclure de l'assembleur dans du code C ou C++.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 252
    Points : 649
    Points
    649
    Par défaut C vs. C++, langage de balisage et plates-formes
    Faut choisir aussi en fonction de ton expérience ou tes envies. Plutôt C ou C++ ? Par contre c'est pas un hasard si la majorité des biblios sont en C++ et perso je trouve ce dernier bien plus naturel et adapté. Un tout autre débat et pas limité à l'IHM !

    Une bonne pratique de toutes façons serait de privilégier la définition de ton interface à l'aide d'un langage de balisage. Par exemple avec GTK+/GTK-- il y a Glade XML. On trouve des équivalents du côté de Qt, wxWidgets & Cie. Avantages : Indépendance du langage, séparation avec son code, pas besoin de recompiler en cas de changement mineur…

    Enfin les plates-formes visées sont à considérer donc je rejoins un commentaire précédent. Application de bureau ? Pour du mobile ? Qt est très multi par exemple.

    PS : Pourquoi pas avoir plutôt posté dans un forum C et C++ ? Celui des biblios par exemple…

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup de m'avoir éclairer sur tous ces sujets. Je constate également que la communication faites autour du sujet C/C++ n'est pas des meilleurs au vue des divergences des réponses ^^ En tout cas, j'ai compris ce que j'avais à comprendre et je vous en remercie.

    Cordialement,
    esc39

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait pour commencer, comprends que "C/C++" est une grosse erreur. C et C++ sont deux langages distincts, différents, et aucun des deux ne contient intégralement l'autre.

    Le fait est qu'une grande partie du C est intégrée dans le C++, et qu'elle représente une petite partie des possibilités du C++.
    Par exemple, l'ajout des fonctions membres (des classes ou structures) en C++ a permis l'ajout du constructeur et du destructeur.
    On pourrait croire cela négligeable, mais cette seule capacité permet la création des "smart pointers" qui clarifient et simplifient énormément la gestion de la mémoire. Les fuites de mémoire deviennent quasiment impossible
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Si ta question est de savoir lequel des deux langages permet de faire du code le plus facilement maintenable pour une interface graphique, je vais me risquer à donner un point de vue assez tranché : globalement, le C++ est meilleur.

    Mais si tu es plus heureux en programmant en C qu'en C++ et que tu préfères décrocher des stages et des jobs en langage C, fais ton programme en C.
    Moi, personnellement, si je me suis orienté vers du C++ plutôt que vers du Java (par exemple), c'est parce que je préférais programmer en C++.

    Ceci étant dit, il faut que je justifie pourquoi que pense qu'une interface graphique serait plus maintenable en C++ qu'en C :
    • Le C++ permet d'écrire du code plus concis qu'en C :
      • Le C++ offre les espaces de noms et la surcharge. Ainsi, à la place d'une fonction du style MonProjet_MonType_getMachin en langage C, la même fonction s'appellera simplement getMachin en C++.
      • En C++, à la fin d'un bloc, les destructeurs des objets automatiques sont automatiquement appelés. En langage C, il faut appeler explicitement les fonctions qui libèrent les ressources.
      • Le C++ offre les exceptions pour lesquelles il n'y a pas besoin d'écrire explicitement du code pour les repropager. En C, quand une fonction retourne un code d'erreur qu'on a besoin de repropager, il faut écrire un bout de code explicite. On se retrouve alors avec des if(codeErreur == 0) ou if(codeErreur != 0) un peu partout dans tout le code.
      • Le C++ permet de surcharger les opérateurs.
    • Le C++ permet de faire de la POO (programmation orientée objet) plus facilement qu'en C. Pour les interfaces graphiques, c'est souvent très pratique.
    • Le C++ permet aussi de faire de la programmation générique avec des templates. En C, quand on fait de la programmation générique, soit on utilise des void* qui ne sont pas type-safe, soit on écrit tout un amas de macros indéboguables. A propos de ces macros, voici un article sur la programmation générique en C écrit pas un pro-C avec un bout de code associé.
    • En C++, on peut plus facilement demander au compilateur de nous taper dessus quand on ne respecte pas les règles.
      Par exemple, l'encapsulation est mieux supportée par le C++, avec le mot-clef private. En C, le seul moyen de faire de la vraie encapsulation sans pouvoir gruger le compilateur, c'est d'utiliser des pointeurs opaques, mais ça réduit un peu les performances.

    Il y a aussi d'autres raisons, mais je vais m'arrêter là pour l'instant.

    J'ajoute cependant une nuance : Pouvoir tirer profit des avantages du C++ demande de bonnes pratiques et de l'entraînement. Par exemple :
    • L'héritage (de la POO) peut être un piège s'il est mal utilisé. Par exemple, des développeurs font de l'héritage là où le mieux aurait été de l'encapsulation.
    • Il faut maîtriser le RAII. Sinon, on se retrouve facilement avec des ressources non libérées, surtout si le code peut lancer des exceptions.

  11. #11
    Membre éclairé Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Points : 890
    Points
    890
    Par défaut
    En tout cas pour des programmes en C++ je te recommenderai l'utilisation de Qt pour faire tes interfaces graphiques. Je trouve que la prise en main ce fait très rapidement. Avec Qt Creator, pas besoins de coder les fenêtres, boutons et autres éléments graphiques, il suffit simplement de les ajouter et les placer via une interface puis d'aller à la fonction associer dans ton code comme par exemple la fonction qui se déclenche à l'appuis de ton bouton. Ca fait gagné un temps fou et c'est plus "propre".

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2004, 18h29
  2. interface graphique utilisateur, que faut-il utiliser?
    Par Missvan dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 01/03/2004, 12h18
  3. Application multiplateforme avec interface graphique
    Par TNorth dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 31/01/2004, 18h55
  4. [Kylix] Interface graphique pour lognes de commande linux
    Par lecharcutierdelinux dans le forum EDI
    Réponses: 6
    Dernier message: 29/08/2003, 10h20
  5. plugin interface graphique
    Par jocelyn dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/08/2003, 09h49

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