CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C++] Header

[exit]
[exit]
Niveau 5
18 août 2010 à 22:15:12

Bonjour à tous,

je me remets, depuis peu, au C++ et j'aurais une petite question concernant les headers :

Supposons que je déclare une classe MyApp héritant de wxApp (wxWidgets donc) dans un *.h, de la manière suivante :

class MyApp: public wxApp
{
virtual bool OnInit();
};

Dans mes souvenirs il fallait, très logiquement, inclure "wx.h" juste avant la déclaration de MyApp pour que le compilateur sache ce qu'est wxApp.

Or, en testant ce code sous visual c++ 2010 express, il s'avère que je n'ai pas besoin d'inclure "wx.h" : ni l'IDE ni le compilateur ne bronche et le programme se génère très naturellement. Pourtant j'ai pas non plus mis de déclaration préliminaire, j'ai vraiment juste la déclaration de la classe et les classiques #ifndef...

Du coup je suis aller jeter un oeil sur d'autres code sources genre le sdk de doom 3 et autres et surprise : pareil, aucun header inclu dans les header, même si les déclaration utilisent des classes définies ailleurs.

Pourtant en reprenant mon manuel de C++, je peut lire des exemples avec des *.h incluant d'autres *.h.

Qu'est ce qui se passe ? Serait une tolérance de visual ? (apparement il charge les headers qu'on lui indique en tant que répertoire include supplémentaires, notamment pour l'autocomplétion, donc est ce qu'il vérifie aussi automatiquement les objets utilisé et fait le lien de manière transparente ? Ou est ce que c'est dans la norme, portable, etc... ?

Merci

IIIIIIIIIIIIIll
IIIIIIIIIIIIIll
Niveau 10
18 août 2010 à 22:20:43

Tu pourrais être plus explicite ?
Dans les .cpp/.cc où tu inclus ton header, les .h nécessaires sont-ils présents ? (Et ce, avant d'inclure le header ?)

dnob700
dnob700
Niveau 10
18 août 2010 à 22:21:06

C'est normal si tous les fichiers qui incluent ton header incluent aussi _avant_ <wx.h>. Comme tout les include sont juste copiés dans le fichier source, dans ce cas là, à la compilation, il y a avant ta déclaration de classe les déclaration de wxWidget et tout est normal.

[exit]
[exit]
Niveau 5
18 août 2010 à 22:27:04

Effectivement, j'avais oublié de considérer les choses sous cet angle, vu qu'avant j'avais tendance à inclure systématiquement le *.h correspondant au *.cpp en premier, du coup ca parait logique :-d

Mais du point de vue des bonnes pratiques, quel est l'usage préconisé ?

dnob700
dnob700
Niveau 10
19 août 2010 à 00:11:14

La bonne méthode, c'est d'inclure dans chacun de tes fichiers .h tout les fichiers .h dont il ont besoin et de faire de même avec les fichiers .c (inclure dans chacun d'eux tout les fichiers .h dont ils ont besoin) sauf s'il est très clair qu'un certain fichier .h l'a déjà fait (il ne suffit pas que tu le sache il faut qu'il soit évident que ça ne changera jamais).

Ce n'est pas un problème d'inclure plusieurs fois le même fichier .h (une fois dans ton .c et d'autres fois dans les .h) car un bon fichier .h (les tiens doivent être pareil) est toujours protégé par une construction du genre :

  1. ifndef _LE_NOM_DU_PROJET_LE_NOM_DU_FICHIER_
  2. define _LE_NOM_DU_PROJET_LE_NOM_DU_FICHIER_

// le reste du fichier ici ...

  1. endif

pour faire en sorte qu'il ne soit _effectivement_ inclue qu'une seule fois pour chaque fichier .c (les définition de macro sont valable pour tout les fichiers .h inclue dans un fichier .c à la suite de celui qui fait la définition de la macro, mais pas pour les autres fichiers .c).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment