OVH Cloud OVH Cloud

Traduire en C++ ?

44 réponses
Avatar
Pierre Maurette
Bonjour,
J'ai quelques petites fonctions C90, dont je souhaite réutiliser le
code source, éventuellement légèrement modifié (donc pas de mise en
bib).
Faisant largement appel à stdio.h elles sont tout sauf "idiomatiques"
en C++, mais elles sont parfaitement (hum, je l'espère en tous cas)
conformes à la norme de ce langage. Je précise que l'interface
elle-même est C plus que C++. Un exemple:

int AjouteNumLignes(const char nom_in[]
,const char nom_out[]
,const int nbr_caracts
);

Le int de retour est sémantiquement un bool.
Réécririez-vous ces fonctions en vue d'une utilisation en C++, sachant
qu'elles ont été validées par l'usage dans leur version actuelle ?
Quelle serait la raison objective de cette réécriture ?
Pour l'instant, je pense qu'il est possible de réutiliser "as is" ces
fonctions. Eventuellement en modifiant l'interface:

bool AjouteNumLignesCPP(const std::string nom_in
,const std::string nom_out
,const int nbr_caracts
)
{
return (AjouteNumLignesC(nom_in.c_str()
,nom_out.c_str()
,nbr_caracts) != 0);
}

Merci pour vos lumières.
--
Pierre

10 réponses

1 2 3 4 5
Avatar
Fabien LE LEZ
On Tue, 31 Aug 2004 14:19:08 +0200, Fabien LE LEZ
:

la solution canonique pour passer un objet en
paramètre est la référence constante.


Autre détail : comme le paramètre est constant, on est assuré que le
compilateur râlera si on essaie de le modifier.


--
;-)

Avatar
Fabien LE LEZ
On Tue, 31 Aug 2004 14:19:08 +0200, Fabien LE LEZ
:

la solution canonique pour passer un objet en
paramètre est la référence constante.


D'ailleurs, il m'est arrivé d'écrire :

// .h
void f (std::string nom);

// .cpp
void f (std::string nom)
{
nom+= ".extension";
...
}

Plus tard, en voulant utiliser la fonction, j'ai dû chercher dans le
.cpp pour comprendre d'où venait le passage par valeur.
Mon erreur venait du fait que la copie du std::string pour
modification est un détail d'implémentation, et ne doit donc pas
apparaître dans la déclaration. Le code correct est :

// .h
void f (std::string const& nom);

// .cpp
void f (std::string const& nom_)
{
std::string nom (nom_);
nom+= ".extension";
...
}


--
;-)

Avatar
Fabien LE LEZ
On Tue, 31 Aug 2004 16:17:16 +0200, Andre Heinen
:

Le mieux est AMHA de les laisser
dans un fichier C, compilé séparément.


Je me permet de mitouter respectueusement.


--
;-)

Avatar
Jean-Marc Bourguet
Pierre Maurette writes:

Fabien LE LEZ a écrit:

On Tue, 31 Aug 2004 15:34:11 +0200, Pierre Maurette
:
[...]

Et si AjouteNumLignes() est une méthode,


Une fonction membre, tu veux dire ?
Oui.

Il me semblait que je pouvais écrire "méthode [d'instance par
défaut]", et "méthode de classe [static]".


Methode ne fait pas partie du vocabulaire C++. Certains l'employent
mais on ne sait jamais si ca designe toutes les fonctions membres ou
seulement les virtuelles.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org



Avatar
Pierre Maurette
Fabien LE LEZ a écrit:
[...]
Mais bon, si tu tiens vraiment à employer le mot "méthode" à la place
de "fonction membre", libre à toi -- on te conprendra ;-)
Non non, je n'ai pas de préférence. Je ne sais pas où j'ai pioché

"méthode", mais nous sommes quelques-uns, même en limitant au C++, à
en croire Google. Mais bon, Google nous donne 465 résultats pour:
"jacques chirak" OR "jacque chirak"
;-)
Alors, OK pour fonction membre, auquel je trouve de plus un petit coté
coquin.
--
Pierre

Avatar
Fabien LE LEZ
On Tue, 31 Aug 2004 17:14:48 +0200, Pierre Maurette
:

Je ne sais pas où j'ai pioché "méthode"


Dans un document sur la programmation objet ?


--
;-)

Avatar
Pierre Maurette
Jean-Marc Bourguet a écrit:
[...]
Methode ne fait pas partie du vocabulaire C++. Certains l'employent
mais on ne sait jamais si ca designe toutes les fonctions membres ou
seulement les virtuelles.
Merci.

J'ai méa-culpé, mais de façon asynchrone malgrè l'ADSL tout neuf...
--
Pierre

Avatar
Fabien LE LEZ
On Tue, 31 Aug 2004 17:17:13 +0200, Pierre Maurette
:

J'ai méa-culpé


Ne faudrait-il pas écrire "mea-culpé" ?

, mais de façon asynchrone malgrè l'ADSL tout neuf...


Usenet est intrinsèquement désespérément asynchrone. J'ai même vu des
messages postés sur news.free.fr, visibles sur news.nerim.fr avant
d'être visibles sur news.free.fr #_#



--
;-)

Avatar
Pierre Maurette
Andre Heinen a écrit:
[...]
Non, si ça marche il vaut mieux ne pas y toucher. Il vaut même
mieux ne pas les recopier dans un fichier C++, puisque ce n'est
pas exactement le même langage. Le mieux est AMHA de les laisser
dans un fichier C, compilé séparément.
Je mélangeais de temps en temps de l'asm et du C++, et je pensais

qu'il me fallait passer par la compilation d'une bibliothèque (ou plus
souvent par de l'asm en ligne). Je viens de vérifier en C++Builder,
ajouter un .c (qui se compile en C) est immédiat. Je vais tenter avec
un .asm, mais je n'y crois pas trop. Pour le C et ma question
initiale, ça roule. Il me reste à voir que faire avec mes sorties vers
stderr.

Quelle serait la raison objective de cette réécriture ?


C'est à toi de nous le dire. S'il y a une bonne raison de faire
le changement, fais-le; par exemple si une réécriture rendrait
leur utilisation beaucoup plus aisée. Mais si ça convient comme
ça, toute modification est du travail supplémentaire inutile.
Avec en prime le risque d'ajouter un bug.
OK. Si aucun Superman ne vient contredire, j'en fais ma religion avec

la même joie que je ne mets plus à jour un système qui fonctionne
(encore que les patches de sécurité :-()
--
Pierre


Avatar
Pierre Maurette
Fabien LE LEZ a écrit:

Je ne sais pas où j'ai pioché "méthode"


Dans un document sur la programmation objet ?
Je ne lis pas de cochonneries, moi, môssieur...

Docu Borland, je pense. Origine Pascal Objet, se retrouve dans la doc
C++Builder via la VCL écrite en Pascal/Delphi. Enfin, peut-être.
--
Pierre


1 2 3 4 5