Re: Question de C++

Page principale

Répondre à ce message
Auteur: Patrick Dupre
Date:  
À: Edgar Bonet
CC: guilde
Sujet: Re: Question de C++
OK,

===========================================================================
 Patrick DUPRÉ                                 | | email: pdupre@???
 Laboratoire de Physico-Chimie de l'Atmosphère | |
 Université du Littoral-Côte d'Opale           | |
 Tel.  (33)-(0)3 28 23 76 12                   | | Fax: 03 28 65 82 44
 189A, avenue Maurice Schumann                 | | 59140 Dunkerque, France
===========================================================================



>
> Patrick DUPRÉ a écrit :
> > Cependant je ne peux pas faire sans alarm:
> > extern int w_r_c(const char *fmt, ...);
>
> Qu'est-ce que tu appelles « alarm » ? Une erreur ? Un warning ?


Warning of course!

> Déjà, il faudrait savoir si w_r_d a() a besoin de modifier les
> caractères du tableau pointé par fmt. Comme la signature évoque un peu
> printf() et cie, je vais dans la suite supposer que non. Mais tu dois me
> démentir si je me trompe.

Non pas besoin
>
> Si tu es en train de reprendre des vieux bouts de code, tu peux
> commencer en « trichant » un peu: tu ne touches pas à l'implémentation
> de ta fonction, mais dans le fichier source où tu l'appelles tu la
> déclares comme prenant "const char *fmt". Déjà tu peux voir si ça marche
> comme ça. Dans un deuxième temps, pour faire plus propre, tu vas mettre
> la même signature (toujours avec "const char *fmt") dans le fichier qui
> l'utilise et dans celui qui l'implémente. Ou dans un .h plutôt.
>
> > J'ai essaye:
> > double w_r_d (char *const fmt, ...) {
>
> Non, c'est pas du tout ça. Là tu déclares fmt comme étant un pointeur
> constant vers un tableau de caractères modifiables. Il te faut un
> pointeur (constant ou modifiable, peu importe) vers un tableau de
> caractères non modifiables. Donc de type "const char *" (ou "const char
> * const" si tu veux, mais rendre le pointeur lui-même constant n'a pas
> d'intérêt).


Oui,
en fait j'avais essaye:
const char *fmt
mais je recupere un warning de compilation a cause de:
for (p = fmt; *p; p++) {

car cela pourrait permettre de modifier fmt qui est declare comme const?
warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
for (p = fmt ; *p ; p++) {
       ^
Donc j'ai essaye aute chose!!


Est-ce que je dois garder ce warning ?



> > double w_r_d (char *fmt, ...) {
> >   char *p;
> >   do {
> >     for (p = fmt ; *p ; p++) {

>
> Si les caractères ne vont pas être modifiés :
>
>     double w_r_d(const char *fmt, ...) {
>         const char *p;
>         do {
>             for (p = fmt; *p; p++) {

>
> Encore une fois, le mot const dans "const char *p" ne qualifie pas le
> pointeur mais ce qui est pointé. Tu as le droit de faire "p++", tu n'as
> pas le droit de faire "*p = ..."
>
> À+,
>
> Edgar.
>
> PS: Je suis abonné à la liste Guilde.
>
>