[C] operations en ANSI ?

operations en ANSI ? [C] - C - Programmation

Marsh Posté le 14-01-2004 à 17:11:42    

Salut a tous,
 
je debute en C, et je voulais savoir si ces operations sont autorisées en C ansi :

Code :
  1. char * toto = "bonjour";
  2. *toto++;


 
une autre question, est-ce que l'opération *toto++ est machine dépendante ou pas?
 
merci par avance, ca devrait pas prendre plus de 2 secs aux pros du C pour m'aider  ;)  
 
bonne journée!
 
Gian

Reply

Marsh Posté le 14-01-2004 à 17:11:42   

Reply

Marsh Posté le 14-01-2004 à 17:12:10    

[:lacuna coil]
 
machine dependante = ?

Reply

Marsh Posté le 14-01-2004 à 17:33:13    

comportement indéfini. les chaînes littérales sont dans un segment séparé qui peut-être read-only.
donc oui tu peux le faire, mais ça peut tout faire planter.
 
donc  
 
const char *toto = "bonjour";
*toto++; /* ok */
(*toto)++; /* erreur de compilation */

Reply

Marsh Posté le 14-01-2004 à 17:35:25    

euh...  
merci beaucoup tazzzzz pour ton aide, mais je ne suis pas sur d'avoir tout compris, *toto++ n'est pas machine dépendant ou bien c'est (*toto)++?
 
et quelqu'un pourrait-il mre dire si ces opérations sont autorisées en C ANSI ?

Reply

Marsh Posté le 14-01-2004 à 17:50:44    

c'est la modification d'une chaine littérale qui est un comportement indéfini.

Reply

Marsh Posté le 14-01-2004 à 18:29:45    

ok! merci beaucoupppppp!
 
autre chose, mon prof m'as dis que char* toto="ezaeaz" et *toto++ sont interdits dans la norme ansi. Seulement quand je compile sous la mandrake 9 ca passe sans problemes avec -ansi -Wall... faut-il rajouter un -Wpointerarithmetics (ou quelque chose comme ca) pour qu'il me signale l'erreur?
 
merci!

Reply

Marsh Posté le 14-01-2004 à 18:33:42    

ben non.
 
*toto++ ne fait que déplacer le pointeur
ce qui n'est pas le cas de (*toto)++

Reply

Marsh Posté le 14-01-2004 à 20:26:56    

Je suis tout a fait d'accord avec toi, chez moi ca marche, je compile nikel et tout, mais ca devrait etre interdit (d'apres le prof) a cause de la norme ANSI qui n'autorise pas les initialisation de chaines (char * toto="ezaeaz" )  
Alors il se plante?

Reply

Marsh Posté le 14-01-2004 à 20:29:25    

c'est juste le const qu'il faut rajouter pour éviter de faire des bétises, mais il ne me semble pas (là je suis pas sur du tout) qu'en C ANSI une déclaration non-const soit une erreur (compatibilité oblige)

Reply

Marsh Posté le 14-01-2004 à 22:01:35    

char* toto="ezaeaz" n'est pas interdit dans la norme ansi.
Cf ce que dit taz (et aussi un autre topic qque part ou on a longuement evoqué cela).
Ca devrait etre const char* toto="ezaeaz" mais ca foutrait trop le souk dans le code existant de rejeter les declarations char* toto="ezaeaz" sans const ...
A+,


Message édité par gilou le 14-01-2004 à 22:02:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 14-01-2004 à 22:01:35   

Reply

Marsh Posté le 14-01-2004 à 22:02:20    

donc fout du const autant que tu peux

Reply

Marsh Posté le 15-01-2004 à 16:51:21    

oki merci les gars!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed