 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Daniel Guest
|
Posted: Mon Apr 24, 2006 7:06 pm Post subject: Classe et visual c++ |
|
|
Bonsoir,
J'ai fait un programme simple en visual c++ (projet MFC exe) puis ajouté
1 bouton.
J'ai ensuite ecrit une classe:
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
Ensuite j'ai ajouté une fonction sur l'appuie du bouton et dans cet
fonction instancié la classe:
MyClass myClass = new Myclass;
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
Merci d'avance
Daniel |
|
| Back to top |
|
 |
jalina Guest
|
Posted: Mon Apr 24, 2006 7:06 pm Post subject: Re: Classe et visual c++ |
|
|
Daniel a écrit :
| Quote: | Bonsoir,
J'ai fait un programme simple en visual c++ (projet MFC exe) puis ajouté
1 bouton.
J'ai ensuite ecrit une classe:
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
Ensuite j'ai ajouté une fonction sur l'appuie du bouton et dans cet
fonction instancié la classe:
MyClass myClass = new Myclass;
|
MyClass myClass = new MyClass("toto"); // voir déf. du constructeur
| Quote: |
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
Merci d'avance
Daniel |
|
|
| Back to top |
|
 |
jalina Guest
|
Posted: Mon Apr 24, 2006 7:06 pm Post subject: Re: Classe et visual c++ |
|
|
jalina a écrit :
| Quote: | Daniel a écrit :
Bonsoir,
J'ai fait un programme simple en visual c++ (projet MFC exe) puis ajouté
1 bouton.
J'ai ensuite ecrit une classe:
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
Ensuite j'ai ajouté une fonction sur l'appuie du bouton et dans cet
fonction instancié la classe:
MyClass myClass = new Myclass;
|
MyClass myClass("toto");
ou
MyClass *myClass = new MyClass("toto");
| Quote: |
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
Merci d'avance
Daniel |
|
|
| Back to top |
|
 |
kanze Guest
|
Posted: Tue Apr 25, 2006 8:06 am Post subject: Re: Classe et visual c++ |
|
|
Daniel wrote:
| Quote: | J'ai fait un programme simple en visual c++ (projet MFC exe)
puis ajouté 1 bouton. J'ai ensuite ecrit une classe :
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
|
Ce qui fait... A priori, je crois qu'ajouter un fichier .cpp à
un projet ne fait que de l'ajouter au fichier de make, de façon
à le compiler et à linker l'objet ainsi généré dans le produit
du projet (exécutable, DLL, etc.). (Mais je ne suis pas sûr ; je
ne me sert pas de l'environement Visual Studios.)
Le contenu d'un fichier source n'est pas a priori disponible à
d'autres sources, au moins que VC++ fasse quelque chose de
particulier. Typiquement, ce qu'il faut faire, c'est de mettre
la définition de la classe dans un en-tête (.hpp, la plupart du
temps sous Windows), qu'on inclut dans chaque source qui va s'en
servir. Et la définition des fonctions non-inline de la classe
dans le .cpp (qui lui aussi inclura le .hpp), qu'on ajoute au
make.
| Quote: | Ensuite j'ai ajouté une fonction sur l'appuie du bouton et
dans cet fonction instancié la classe:
|
Fonction dans le .cpp qui contient la définition de la classe ?
Sinon, le compilateur n'a aucune possibilité de savoir que la
classe existe.
| Quote: | MyClass myClass = new Myclass;
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
|
Utiliser les en-têtes.
Comme j'ai dit, je ne connais pas bien Visual Studios, mais je
crois que c'est un wrapper assez mince autour des fonctionalités
classiques : éditeur, compilateur, éditeur de liens, make, etc.
et qu'ils n'apportent rien d'essentiel par rapport à ces
utilitaires. (À l'encontre de Visual Age, par exemple, où on
pouvait réelement se passer des en-têtes)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Daniel Guest
|
Posted: Tue Apr 25, 2006 4:09 pm Post subject: Re: Classe et visual c++ |
|
|
jalina a écrit :
| Quote: | jalina a écrit :
Daniel a écrit :
Bonsoir,
J'ai fait un programme simple en visual c++ (projet MFC exe) puis ajouté
1 bouton.
J'ai ensuite ecrit une classe:
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
Ensuite j'ai ajouté une fonction sur l'appuie du bouton et dans cet
fonction instancié la classe:
MyClass myClass = new Myclass;
MyClass myClass("toto");
ou
MyClass *myClass = new MyClass("toto");
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
Merci d'avance
Daniel
|
Bonsoir,
| Quote: | MyClass myClass("toto");
ou
MyClass *myClass = new MyClass("toto");
|
ne fonctionne pas non plus
Merci |
|
| Back to top |
|
 |
Daniel Guest
|
Posted: Wed Apr 26, 2006 5:06 pm Post subject: Re: Classe et visual c++ |
|
|
Bonsoir,
Merci pour la réponse, Vous avez mis le doigt sur le problème.
En effet je n'arrive pas meme avec une fonction.h à faire reconnaitre
dans l'environnement c++ une fonction crée autrement que l'outils visual.
Daniel
kanze a écrit :
| Quote: | Daniel wrote:
J'ai fait un programme simple en visual c++ (projet MFC exe)
puis ajouté 1 bouton. J'ai ensuite ecrit une classe :
class MyClass {
MyClass::MyClass(char *fileName){ // Constructeur
}
MyClass::~MyClass(); // Destructeur de la classe
};
J'ai ajouté cette classe MyClass.cpp dans le projet.
Ce qui fait... A priori, je crois qu'ajouter un fichier .cpp à
un projet ne fait que de l'ajouter au fichier de make, de façon
à le compiler et à linker l'objet ainsi généré dans le produit
du projet (exécutable, DLL, etc.). (Mais je ne suis pas sûr ; je
ne me sert pas de l'environement Visual Studios.)
Le contenu d'un fichier source n'est pas a priori disponible à
d'autres sources, au moins que VC++ fasse quelque chose de
particulier. Typiquement, ce qu'il faut faire, c'est de mettre
la définition de la classe dans un en-tête (.hpp, la plupart du
temps sous Windows), qu'on inclut dans chaque source qui va s'en
servir. Et la définition des fonctions non-inline de la classe
dans le .cpp (qui lui aussi inclura le .hpp), qu'on ajoute au
make.
Ensuite j'ai ajouté une fonction sur l'appuie du bouton et
dans cet fonction instancié la classe:
Fonction dans le .cpp qui contient la définition de la classe ?
Sinon, le compilateur n'a aucune possibilité de savoir que la
classe existe.
MyClass myClass = new Myclass;
et j'ai toujours MyClass inconnu, alors qu'elle apparait bien.
Comment faire pour que c++ la reconnaisse ?
Utiliser les en-têtes.
Comme j'ai dit, je ne connais pas bien Visual Studios, mais je
crois que c'est un wrapper assez mince autour des fonctionalités
classiques : éditeur, compilateur, éditeur de liens, make, etc.
et qu'ils n'apportent rien d'essentiel par rapport à ces
utilitaires. (À l'encontre de Visual Age, par exemple, où on
pouvait réelement se passer des en-têtes)
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|
|
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Wed Apr 26, 2006 7:06 pm Post subject: Re: Classe et visual c++ |
|
|
Daniel wrote on 26/04/2006 18:33:
| Quote: | Bonsoir,
Merci pour la réponse, Vous avez mis le doigt sur le problème.
En effet je n'arrive pas meme avec une fonction.h à faire reconnaitre
dans l'environnement c++ une fonction crée autrement que l'outils visual.
|
hmmm, ça n'a aucun sens tout ça -- "cela manque fortement de précision
et je doute que nous puissions vous aider plus avant" ...
lorsque tu utilises le dialog wizard et dbl-clique sur un bouton, ou
lorsque via le class wizard tu sélectionnes ton bouton (son ID) et
dbl-clique sur ONCLICKED, studio te génère du code pour cette action
(une methode OnLeNomDuBonton) et insère ses macros dans les message-maps
distribuant les msgs.
pour autant si tu veux réaliser, dans cette méthode, une opération
nécessitant le classe Toto - implémentée dans toto.cpp et déclarée dans
toto.h - tu dois 1) inclure des 2 fichiers dans le projet (surtout le
..cpp) et 2) insérer un #include "toto.h" au haut du .cpp du fichier qui
contient ton dialog ou ton j'sais-pas-quoi qui contient le bouton
sus-décrit (je dis "en haut" mais pas trop, si tu le mets avant
"stdafx.h" le compilo chouignera que windows.h doit être inclus avant;
donc disons juste après le bloc d'include déjà présent).
Sylvain. |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Thu Apr 27, 2006 8:06 am Post subject: Re: Classe et visual c++ |
|
|
Sylvain wrote:
| Quote: | Daniel wrote on 26/04/2006 18:33:
Merci pour la réponse, Vous avez mis le doigt sur le
problème. En effet je n'arrive pas meme avec une fonction.h
à faire reconnaitre dans l'environnement c++ une fonction
crée autrement que l'outils visual.
hmmm, ça n'a aucun sens tout ça -- "cela manque fortement de
précision et je doute que nous puissions vous aider plus
avant" ...
|
C'est sûr qu'il avait un petit problème de langage dans son
posting original : « J'ai ajouté cette classe MyClass.cpp... ».
Mais je le trouve raisonable de croire ce qu'il voulait dire,
c'est qu'il a ajouté un fichier MyClass.cpp au projet, et que
ce fichier contenait la définition de la classe MyClass, ainsi
que son implémentation.
Je me permets donc un petit rappel du vocabulaire propre à C++.
(Je crois que tu le sais, mais Daniel, peut-être pas.) En C++,
on distingue entre définition et declaration. Une définition
crée (définit) quelque chose, une declaration qui n'est pas une
définition dit que quelque chose existe, sans la définir ou le
créer. (Techniquement, une définition est toujours une
declaration -- tu ne peux pas créer quelque chose sans faire
savoir qu'il existe. Souvent, par abus, on dit declaration quand
on ne veut parler que des declarations qui ne sont pas des
définitions.)
Donc, par exemple :
int i ;
est une définition, il crée une instance d'une variable qui
s'appelle i, et qui a le type int. En revanche,
extern int i ;
n'est qu'une declaration -- il dit au compilateur qu'il existe,
quelque part, une variable i de type int, sans la créer.
En ce qui concerne les classes,
class Toto ;
n'est qu'une declaration -- il dit au compilateur qu'il existe
une classe du nom Toto, sans la définir. En revanche :
class Toto { /* ... */ } ;
est une définition de la classe.
Ce qui se trouve dans la définition de la classe, ce sont des
declarations -- il faut bien qu'il y a une définition des
fonctions membres ailleurs. C'est ce qu'on appelle en général
l'implémentation de la classe : la définition des membres qui
ont été declarés dans la classe.
Maintenant, il faut savoir que le C++ traite les classes, et les
objets et les fonctions un peu différemment en ce qui concerne
les declarations et les définitions. Quand tu as une declaration
d'une variable ou d'une fonction, le type associé au nom est
complet -- tu peux donc l'utiliser sans problème dans ton code,
exactement comme s'il y a été défini, à condition de fournir une
définition (et une seule) quelque part. En revanche, quand tu
déclares une classe, sans la définir, le type est incomplet --
c'est le type même qui n'est pas défini. Tu ne peux en faire que
peu de chose -- pratiquement, tu peux en manipuler des pointeurs
ou des références, mais c'est tout. Il faut donc que chaque
module (.cpp) qui utilise la classe en est la définition. (Et on
peut répéter la définition dans autant de sources qu'on veut --
à condition que chaque répétion soit identique.)
En C++, la façon de faire ces répétions, c'est avec l'inclusion
d'un fichier d'en-tête (typiquement un .hpp sous Windows). Quand
tu écris « #include "MyClass.hpp" » dans une source, le
compilateur fait en fait un espèce de copier/coller, et insère
la texte de MyClass.hpp là à la place de l'include. Pour définir
une classe, il est donc coutume de créer deux fichiers, un
fichier MyClass.hpp, avec la définition de la classe, et un
fichier MyClass.cpp, avec l'implémentation, c-à-d la définition
des fonctions membre (et des variables statiques membre).
Ensuite, tu inclus MyClass.hpp dans toutes les .cpp qui doivent
se servir de la classe, et tu compiles MyClass.cpp (qui doit lui
aussi inclure MyClass.hpp), et tu linkes l'objet généré.
Je ne connais pas bien Visual Studios, mais je suis assez sûr
que quand tu ajoutes un fichier .cpp à un projet, il modifie ces
fichiers internes (make, etc.) pour que le .cpp soit compilé, et
que l'objet correspondant soit ajouté au link. Je suis aussi
très certain qu'il ne modifie pas les autres fichiers existants
pour y ajouter un include d'un .hpp ; ça, c'est à toi de le
faire. Ce que je ne sais pas, c'est s'il faut ajouter le .hpp
explicitement au projet ou non -- du moment que tu as fait
l'include, le compilateur sait bien le rétrouver, mais j'imagine
qu'il y a d'autres fonctionnalités de l'IDE qui existe qu'il en
connaisse l'existance.
| Quote: | lorsque tu utilises le dialog wizard et dbl-clique sur un
bouton, ou lorsque via le class wizard tu sélectionnes ton
bouton (son ID) et dbl-clique sur ONCLICKED, studio te génère
du code pour cette action (une methode OnLeNomDuBonton) et
insère ses macros dans les message-maps distribuant les msgs.
|
Si on utilise un wizard pour créer quelque chose, je suppose
qu'il fasse tout ce qu'il faut. Si j'ai bien compris, ce n'était
pas le cas ici. Et on ne peut pas utiliser les wizards pour
tout -- il y a toujours une partie de l'application qu'il faut
écrire à la main.
S'il utilise les wizard, aussi, il ne s'agit plus du C++ ; il y
a un autre groupe pour ça (fr.comp.windows.programming, ou
quelque chose du genre).
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Thu Apr 27, 2006 2:06 pm Post subject: Re: Classe et visual c++ |
|
|
kanze wrote on 27/04/2006 09:50:
| Quote: |
En C++, la façon de faire ces répétions, c'est avec l'inclusion
d'un fichier d'en-tête (typiquement un .hpp sous Windows).
|
..h suffit - les headers utilisateurs utilisent cette extension que les
fichiers sources sont générés par l'IDE
..hpp est "reconnu" par l'IDE (signifiant qu'il les ignore comme les .h)
| Quote: | Je ne connais pas bien Visual Studios, mais je suis assez sûr
que quand tu ajoutes un fichier .cpp à un projet, il modifie ces
fichiers internes (make, etc.) pour que le .cpp soit compilé, et
que l'objet correspondant soit ajouté au link.
|
je te confirme (il gère un fichier dit "projet", optionnellement génère
un makefile selon nmake non compatible make).
| Quote: | Je suis aussi très certain qu'il ne modifie pas les autres
fichiers existants pour y ajouter un include d'un .hpp ;
|
sauf cas particulier, ajout de class ATL dans un projet implémémentant
la factory de ces composants - c'est du 100% MS spécifique.
| Quote: | pour y ajouter un include d'un .hpp ; ça, c'est à toi de le
faire. Ce que je ne sais pas, c'est s'il faut ajouter le .hpp
explicitement au projet ou non -- [...]
|
l'utilisateur peut les insérer, l'IDE (le gestionnaire de dépendances)
les insère (les liste simplement) s'ils ne sont pas présents.
| Quote: | S'il utilise les wizard, aussi, il ne s'agit plus du C++ ; il y
a un autre groupe pour ça (fr.comp.windows.programming, ou
quelque chose du genre).
|
je suis convaincu que sa question était "qu'est ce qui se passe quand je
clique au hasard sans comprendre dans Studio..." et que toute réponse
possible (tutorial d'utilisation de l'IDE ou guide plus avancé) est à
chercher chez microsoft (presse, par exemple) et non ici.
Sylvain. |
|
| Back to top |
|
 |
Daniel Guest
|
Posted: Thu Apr 27, 2006 4:07 pm Post subject: Re: Classe et visual c++ |
|
|
Bonsoir,
Merci à tous pour votre aide et les explications.
Maintenant ça link sans problème.
En fait au départ j'avais crée une classe MyClass.cpp et pensais qu'elle
etait automatiquement reconnue puisque je la voyait dans la fenetre
Class de l'environnement.
Bonne soirée
Daniel
Sylvain a écrit :
| Quote: | kanze wrote on 27/04/2006 09:50:
En C++, la façon de faire ces répétions, c'est avec l'inclusion
d'un fichier d'en-tête (typiquement un .hpp sous Windows).
.h suffit - les headers utilisateurs utilisent cette extension que les
fichiers sources sont générés par l'IDE
.hpp est "reconnu" par l'IDE (signifiant qu'il les ignore comme les .h)
Je ne connais pas bien Visual Studios, mais je suis assez sûr
que quand tu ajoutes un fichier .cpp à un projet, il modifie ces
fichiers internes (make, etc.) pour que le .cpp soit compilé, et
que l'objet correspondant soit ajouté au link.
je te confirme (il gère un fichier dit "projet", optionnellement génère
un makefile selon nmake non compatible make).
Je suis aussi très certain qu'il ne modifie pas les autres
fichiers existants pour y ajouter un include d'un .hpp ;
sauf cas particulier, ajout de class ATL dans un projet implémémentant
la factory de ces composants - c'est du 100% MS spécifique.
pour y ajouter un include d'un .hpp ; ça, c'est à toi de le
faire. Ce que je ne sais pas, c'est s'il faut ajouter le .hpp
explicitement au projet ou non -- [...]
l'utilisateur peut les insérer, l'IDE (le gestionnaire de dépendances)
les insère (les liste simplement) s'ils ne sont pas présents.
S'il utilise les wizard, aussi, il ne s'agit plus du C++ ; il y
a un autre groupe pour ça (fr.comp.windows.programming, ou
quelque chose du genre).
je suis convaincu que sa question était "qu'est ce qui se passe quand je
clique au hasard sans comprendre dans Studio..." et que toute réponse
possible (tutorial d'utilisation de l'IDE ou guide plus avancé) est à
chercher chez microsoft (presse, par exemple) et non ici.
Sylvain. |
|
|
| Back to top |
|
 |
kanze Guest
|
Posted: Thu Apr 27, 2006 5:06 pm Post subject: Re: Classe et visual c++ |
|
|
Sylvain wrote:
| Quote: | kanze wrote on 27/04/2006 09:50:
En C++, la façon de faire ces répétions, c'est avec
l'inclusion d'un fichier d'en-tête (typiquement un .hpp sous
Windows).
.h suffit - les headers utilisateurs utilisent cette extension
que les fichiers sources sont générés par l'IDE .hpp est
"reconnu" par l'IDE (signifiant qu'il les ignore comme les .h)
|
Au niveau du compilateur, tu peux faire ce que tu veux --
toto.titi marche aussi (sans parler de string ou vector:-)).
Dans la plupart d'endroits où j'ai travaillé, en revanche, on a
gardé .h pour les en-têtes acceptables et en C et en C++. Je
croyais que c'était aussi l'habitude du monde Windows : j'avoue
ne pas connaître beaucoup ce monde, mais je constate que
l'utilisation du .hpp est très répandue.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Thu Apr 27, 2006 5:06 pm Post subject: Re: Classe et visual c++ |
|
|
Daniel wrote on 27/04/2006 17:56:
| Quote: |
En fait au départ j'avais crée une classe MyClass.cpp et pensais qu'elle
etait automatiquement reconnue puisque je la voyait dans la fenetre
Class de l'environnement.
|
ben ouais, on écrit une classe et on pense qu'elle est "automatiquement"
et spontanément connue de la terre entière (puisqu'elle existe, puisque
je la vois), ben non, cela ne suffit pas tout à fait.
Sylvain. |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Thu Apr 27, 2006 5:06 pm Post subject: Re: Classe et visual c++ |
|
|
kanze wrote on 27/04/2006 18:29:
| Quote: |
Dans la plupart d'endroits où j'ai travaillé, en revanche, on a
gardé .h pour les en-têtes acceptables et en C et en C++. Je
croyais que c'était aussi l'habitude du monde Windows : j'avoue
ne pas connaître beaucoup ce monde, mais je constate que
l'utilisation du .hpp est très répandue.
|
répandu chez ? un IDE particulier d'un éditeur particulier ?
microsoft les utilise très peu et semble en réserver l'usage à des
fichiers de déclaration et définition (des classes où toutes les
méthodes sont inline) .hpp serait alors le condensat de .h et .cpp car
un seul fichier est fourni -- est-ce la bonne explication historique??
Sylvain. |
|
| Back to top |
|
 |
kanze Guest
|
Posted: Fri Apr 28, 2006 7:06 am Post subject: Re: Classe et visual c++ |
|
|
Sylvain wrote:
| Quote: | kanze wrote on 27/04/2006 18:29:
Dans la plupart d'endroits où j'ai travaillé, en revanche,
on a gardé .h pour les en-têtes acceptables et en C et en
C++. Je croyais que c'était aussi l'habitude du monde
Windows : j'avoue ne pas connaître beaucoup ce monde, mais
je constate que l'utilisation du .hpp est très répandue.
répandu chez ? un IDE particulier d'un éditeur particulier ?
|
Les bibliothèques disponibles sur la toile : Boost, par exemple.
Mais en régardant, c'est vrai qu'il y en a beaucoup aussi qui se
sert d'un .h, tout simplement. En fait, Boost c'est la seule
exception que je trouve rapidement. (En revanche, c'est la seule
bibliothèque tièrce que j'utilise régulièrement.)
Il me semble aussi que Borland utilisait .hpp pour ses en-têtes
C++. Je sais que quand la question du nommage des en-têtes
standard a été discuté dans le comité, on a dit qu'il n'y avait
pas de "standard" de facto, que selon l'implémentation, on avait
..h, .hpp, .hxx et peut-être aussi .hh.
Personellement, je n'aime pas .h -- je vois bien une utilité
dans la distinction entre les en-têtes C et les en-têtes C++.
Mais il semble que c'est bien encrusté.
| Quote: | microsoft les utilise très peu et semble en réserver l'usage à
des fichiers de déclaration et définition (des classes où
toutes les méthodes sont inline) .hpp serait alors le
condensat de .h et .cpp car un seul fichier est fourni --
est-ce la bonne explication historique??
|
Je ne sais pas. D'après mes souvenirs, CFront utilisait .C et
..h. Le désir de distinguer entre les en-têtes C ou C/C++ et les
en-têtes pûrement C++ s'est fait sentir assez tôt chez certains,
et on a logiquement adopté .H. Puis, Walter a écrit son
compilateur MS-DOS, où la case n'était pas signifiant, et .C et
..c nommait le même fichier:-). Alors, une nouvelle convention
qui ne se basait pas sur la case s'est développée -- plusieurs
fois, de façon indépendante. Je sais que le compilateur de
Walter acceptait .cc, .cpp, .cxx, et je crois .c++ -- si je me
souviens bien, Walter lui-même utilisait .cxx, mais je ne suis
plus sûr. Et évidemment, ceux qui utilisaient .H avant
adoptaient la forme .hh, hpp ou .hxx.
Et quand j'y pense, je ne sais pas pourquoi .cc s'est tellement
répandu en milieu Unix. A priori, si on restait sous Unix, il
n'y avait pas de raison de changer de .C, et si on voulait
supporter aussi MS-DOS, je l'aurais imaginer plus logique
d'adopter les conventions du compilateur MS-DOS dont on se
servait : .cpp pour Borland, ou .cxx pour Zortech -- Microsoft
n'avait pas encore de compilateur C++ à l'époque. Mais je
constate que parmi mes clients, .cc est la règle ; pour les
en-têtes, on trouve surtout .hh, mais aussi .h. Et que .cc est
assez répandu pour que Microsoft se mette à le supporter aussi.
Avec VC++ 6.0, il fallait /Tp pour que le compilateur (ou
proprement parlant, le pilote du compilateur) reconnaisse que le
fichier était une source C++ ; avec la version 2005, il le
reconnaît d'office.
--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
| Back to top |
|
 |
Sylvain Guest
|
Posted: Fri Apr 28, 2006 6:06 pm Post subject: Re: Classe et visual c++ |
|
|
kanze wrote on 28/04/2006 09:02:
| Quote: |
Personellement, je n'aime pas .h -- je vois bien une utilité
dans la distinction entre les en-têtes C et les en-têtes C++.
|
les gouts et les suffixes ...
| Quote: | D'après mes souvenirs, CFront utilisait .C et .h
|
CFront de Apple utilisait .cpp (en input), on ne pense peut être pas au
même (peut être parce que le file system de MacOS n'était pas case
sensitive).
| Quote: | je ne sais pas pourquoi .cc s'est tellement
répandu en milieu Unix.
|
ne serait-ce pas du au nom des compilos eux-même ? ("cc" de Sun, par
exemple, bien avant que "gcc" ne soit répandu).
| Quote: | j'aurais imaginer plus logique d'adopter les
conventions du compilateur MS-DOS dont on se
servait : .cpp pour Borland, ou .cxx pour Zortech --
Microsoft n'avait pas encore de compilateur C++ à l'époque
|
j'ai commencé le C/C++ avec Turbo C 2.0 en 1989, MS n'avait pas de role
d'éditeur de compilateur C à cette date (préférant le basic), mais ils
avaient quand même des compilos C internes, la (vraie) première version
commerciale date de 1993 avec VC 1.5 targetant Windows 1.0 et elle a
repris la convention .h/.cpp déjà utilisée par Borland en effet.
Sylvain. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|