Pages : 1
#1 Le 27/02/2007, à 22:10
- Chaussette
Volatile !
Bon-jour-soir
Pouvez-vous me dire pourquoi se code exemple ne fonctionne pas ?
volatile char p[50];
int main (void)
{
strcpy (p, "bonjour");
return 0;
}
"attention : passage de l'argument n°1 de « strcpy » annule des qualificateurs du type du pointeur cible"
Dernière modification par Chaussette (Le 28/02/2007, à 20:30)
Les clowns se marient en grande pompes
Hors ligne
#2 Le 28/02/2007, à 20:31
- Chaussette
Re : Volatile !
EDIT:
-Changement du titre.
-Isolation du problème et proposition d' un exemple.
-up
Les clowns se marient en grande pompes
Hors ligne
#3 Le 28/02/2007, à 21:37
- Zapan
Re : Volatile !
T'as vraiment besoin de volatile ? Parceque d'une je vois pas à quoi ça sert, et de deux ça compile sans...
Enfin si t'en a besoin tu peux m'expliquer à quoi ça sert ?
Hors ligne
#4 Le 28/02/2007, à 22:07
- Chaussette
Re : Volatile !
Mon programme utilise un thread.
Il fait des opérations et des test sur une chaîne, qui reçoit aussi les opérations du thread.
Pour éviter des résultats aléatoires qui peuvent aussi tourner en erreur de segmentation j' ai besoin que le compilateur n'optimise pas ces opérations.
EDIT :
Je compte aussi bloquer l'accès a cette variable, pendant les opération que fait le thread.
Sinon ça ne suffirait pas.
Mais pardessus tout, j' aimerais comprendre pourquoi strcpy & Co me renvoient des erreurs.
Dernière modification par Chaussette (Le 28/02/2007, à 22:11)
Les clowns se marient en grande pompes
Hors ligne
#5 Le 28/02/2007, à 23:20
- xilef
Re : Volatile !
Euh, ça fonctionne... Je viens de faire le test en plus et tout est #1.
.felix
Hors ligne
#6 Le 01/03/2007, à 00:46
- Chaussette
Re : Volatile !
hmm.. J' utilise cette ligne de compilation toute bête :
gcc -o test test.c
C'est ce que tu as du faire aussi j' imagine ?
L' erreur vient donc du compilo, ou des librairies..
Une idée ?
Les clowns se marient en grande pompes
Hors ligne
#7 Le 01/03/2007, à 01:04
- Luc Hermitte
Re : Volatile !
T'inquietes, il n'optimisera rien sur un tableau. C'est pas comme si tu allais bidouiller un entier ou la valeur d'un pointeur.
#8 Le 01/03/2007, à 03:06
- xilef
Re : Volatile !
C'est pas une erreur mais un warning... ça n'empêche pas ton programme de compiler
.felix
Hors ligne
#9 Le 01/03/2007, à 04:26
- Chaussette
Re : Volatile !
Si je comprend bien (j'ai encore du mal des fois ) comme j' appel une bibliothèque dynamique, il est impossible d' optimiser son code, puisqu' elle est déjà compilée. Le code n' est optimisé que dans mon programme a moi.
J' ai bon !?
Si j' ai bon, je trouve ce warning un peu abscon pour des options de warning très laxistes.
Les clowns se marient en grande pompes
Hors ligne
#10 Le 01/03/2007, à 14:40
- Luc Hermitte
Re : Volatile !
Le warning veux juste dire que ta fonction ne sait pas traiter un argument qui est sensé être volatile.
Il aurait fallu que la signature soit "strcpy(char volatile*, char const*)", ou que tu retires le qualifieur avec un const_cast<>() (en C++).
D'un autre côté, sur un tableau de caractères, le volatile n'apporte strictement rien. A la limite, tu peux y donner une sémantique particulière. C'est une technique très intéressante, mais je ne suis pas persuadé que ta volonté d'utiliser volatile soit guidées par ses considérations -- tu aurais su ce qui clochait autrement (cf article d'Andrei Alexandrescu, pour le CUJ, au sujet de volatile -> http://www.ddj.com/dept/cpp/184403766)
#11 Le 01/03/2007, à 18:13
- Chaussette
Re : Volatile !
Effectivement, a y réfléchir je n' ai pas vraiment besoin de volatile.
Je me penche, là plutôt vers les mutex.
Mais je voulais comprendre la cause du warning, et en connaître les conséquences.
Merci pour votre aide :°)
a++
Dernière modification par Chaussette (Le 01/03/2007, à 18:13)
Les clowns se marient en grande pompes
Hors ligne
Pages : 1