Re: Question de C++

Page principale

Répondre à ce message
Auteur: Edgar Bonet
Date:  
À: guilde
Sujet: Re: Question de C++
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 ?

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.

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).

> 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.