Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1373 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6
Auteur Sujet :

les pointeurs , les tableaux ??? je mis perd

n°1138921
Elmoricq
Modérateur
Posté le 03-07-2005 à 23:32:26  profilanswer
 

Reprise du message précédent :

chrisbk a écrit :

bin truc idiot. utilise un type non déclaré, il va te pondre une syntax error au lieu de te dire "bah ton type, jle connais pas". C'est crétin, mais c'est comme ca pour bcp de chose


 
Je regarde ça demain (j'ai pas de 2.95 chez moi  :o  )

mood
Publicité
Posté le 03-07-2005 à 23:32:26  profilanswer
 

n°1138922
super-tupa​pau
Posté le 03-07-2005 à 23:33:23  profilanswer
 

Pour le coup de la ligne 63 j'ai deja vu pire:
 
Quequ'un ce plaint d'une erreur dans un script php  
On lui demande forcement le code source
Il nous donne le code html retourner par le serveur [:acherpy]

n°1138923
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:33:29  profilanswer
 

chrisbk a écrit :

oué enfin ca n'a rien a voir avec mon propos

bah si. Tu discutes des différents messages d'erreurs des compilateurs. Moi je disais juste que d'expérience, le débutant, il lit que le numéro d'erreur alors que le familier, il parle le gcc ou le truc-muche

n°1138926
chrisbk
-
Posté le 03-07-2005 à 23:39:54  profilanswer
 

Taz a écrit :

bah si. Tu discutes des différents messages d'erreurs des compilateurs. Moi je disais juste que d'expérience, le débutant, il lit que le numéro d'erreur alors que le familier, il parle le gcc ou le truc-muche


 
bin je dis que meme en etant plus débutant je prefere un message qui me dit rapidement ce qui cloche plutot qu'un vague "syntax error". J'aime bien le coté "nostalgie de mon basic sur amstrad" mais faut pas pousser
 
elmo : bah essaye avec ta version, si ca a changé tant mieux hein ? :d

n°1138927
super-tupa​pau
Posté le 03-07-2005 à 23:40:08  profilanswer
 

retour au sujet [:aimeric_1]
 
exercice 2:

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define P_SIZE 64
  4. // Déclaration de la fonction display
  5. void display( char *str ){
  6. printf("Chaine: %s", str);
  7. }
  8. int main(int argc, char ** argv){
  9. // Définition est inisialisation
  10. char *p = malloc(P_SIZE);
  11. // Récuperé la chaine de 10 caractères écrit par l'utilisateur
  12. printf("Chaine# " );
  13. fflush(stdout);
  14. fgets( p, P_SIZE, stdin );
  15. // Appel de la fonction d'affichage
  16. display( p );
  17. // Demander l'effacement de l'espace alloué
  18. free(p);
  19. return 0;
  20. }


Message édité par super-tupapau le 03-07-2005 à 23:40:50
n°1138928
el muchach​o
Comfortably Numb
Posté le 03-07-2005 à 23:40:24  profilanswer
 

STOOOPPPP LE HS !!!!!!!!!!!!!!!!!!
 
tupapau, c'est TB. Pour l'instant, les params de main sont inutiles, mais ils serviront par la suite, quand je te demanderai d'encoder et de décoder un ensemble de phrases lues dans un fichier avec ton programme de chiffre de César.


Message édité par el muchacho le 03-07-2005 à 23:44:39
n°1138929
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:42:11  profilanswer
 

je me souviens des mes débuts, le message d'erreur, je le lisais pas, j'allais à la ligne indiqué et je trifouillait jusqu'à que:)

n°1138930
super-tupa​pau
Posté le 03-07-2005 à 23:42:43  profilanswer
 

[:athome] à tous

n°1138931
super-tupa​pau
Posté le 03-07-2005 à 23:44:11  profilanswer
 

Citation :

je me souviens des mes débuts, le message d'erreur, je le lisais pas, j'allais à la ligne indiqué et je trifouillait jusqu'à que:)


 
bizarre sa me ressemble [:aurelie22]
mais maintenant je le fait moins
 

Citation :

les params de main sont inutiles, mais ils serviront par la suite, quand je te demanderai d'encoder et de décoder un ensemble de phrases lues dans un fichier avec ton programme de chiffre de César.

 
 
je fait l'exercice 3 et 4 avant?


Message édité par super-tupapau le 03-07-2005 à 23:45:42
n°1138932
chrisbk
-
Posté le 03-07-2005 à 23:45:03  profilanswer
 

Taz a écrit :

je me souviens des mes débuts, le message d'erreur, je le lisais pas, j'allais à la ligne indiqué et je trifouillait jusqu'à que:)


 
....jusqu'a ce que le compilo ferme sa gueule pour ensuite voir le prog exploser en vol, je connais ca aussi :d

mood
Publicité
Posté le 03-07-2005 à 23:45:03  profilanswer
 

n°1138933
el muchach​o
Comfortably Numb
Posté le 03-07-2005 à 23:46:24  profilanswer
 

chrisbk a écrit :

....jusqu'a ce que le compilo ferme sa gueule pour ensuite voir le prog exploser en vol, je connais ca aussi :d


 
 
Un grand classique qu'on voit tjrs : le typage n'est pas bon ? Qu'à cela ne tienne, on caste à tout va pour que ça rentre au chausse-pied !


Message édité par el muchacho le 03-07-2005 à 23:46:49
n°1138934
super-tupa​pau
Posté le 03-07-2005 à 23:46:49  profilanswer
 

Citation :

....jusqu'a ce que le compilo ferme sa gueule pour ensuite voir le prog exploser en vol, je connais ca aussi :d


 
Au mieux sa fait un segment fault au pire sa plante la bête
 

Citation :

Un grand classique qu'on voit tjrs : le typage n'est pas bon ? Qu'à cela ne tienne, on caste à tout va pour que ça rentre au chausse-


 
et encore le compilateur ne se fait pas tjr avoir


Message édité par super-tupapau le 03-07-2005 à 23:48:08
n°1138935
Taz
bisounours-codeur
Posté le 03-07-2005 à 23:48:58  profilanswer
 

chrisbk a écrit :

....jusqu'a ce que le compilo ferme sa gueule pour ensuite voir le prog exploser en vol, je connais ca aussi :d


qui n'a pas fait un projet avec un discret &>/dev/null planqué dans son Makefile

n°1138936
Emmanuel D​elahaye
C is a sharp tool
Posté le 03-07-2005 à 23:49:56  profilanswer
 

super-tupapau a écrit :

retour au sujet [:aimeric_1]
exercice 2:


Ca vient. Le problème du fflush(stdout), c'est à chaque fois qu'il y a un doute. Le '\n' n'estant pas systématiquement pris par fgets() (saturation), le printf()  de display() ne fonctionnera donc pas forcément. ..
 
D'autre part, il y a des précautions d'usage avec l'allocation dynamique. En effet, elle peut échouer (retourne NULL). Il faut donc impérativement tester la valeur retournée par malloc() avant de l'utiliser, car utiliser NULL provoque un comportement indéfini.


   T *p = malloc(sizeof *p);
 
   if (p != NULL)
   {
      /* ok... */
   }


 
http://mapage.noos.fr/emdel/notes.htm#malloc


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1138937
el muchach​o
Comfortably Numb
Posté le 03-07-2005 à 23:50:44  profilanswer
 

super-tupapau a écrit :


Citation :

les params de main sont inutiles, mais ils serviront par la suite, quand je te demanderai d'encoder et de décoder un ensemble de phrases lues dans un fichier avec ton programme de chiffre de César.

 
 
je fait l'exercice 3 et 4 avant?


 
Non, pour l'instant, tu t'en tiens à ce que je t'ai dit précédemment, tu fait les fonctions encode et décode pour une chaîne de caractères.
Ensuite, on passera à l'exercice 3, où tu vas encoder et décoder non plus une, mais plusieurs chaînes de caractères.
Puis 4 où les chaines seront lues dans un fichier dont le nom sera passé en paramètre de main().
 
Une fois que tu auras fait et compris ça, tu pourras prendre ton livre et voler de tes propres ailes.


Message édité par el muchacho le 03-07-2005 à 23:52:13
n°1138938
super-tupa​pau
Posté le 03-07-2005 à 23:51:57  profilanswer
 

bon je vais me coucher (voila je raconte ma vie sur ce forum faut que je me soigne)
 
je frait les deux autres exo de el muchacho demain et merci maintenant ca va vraiment mieux
 
EDIT: Ok je le ferait demain (le chiffre de césar c bon c facile)


Message édité par super-tupapau le 03-07-2005 à 23:54:08
n°1138939
chrisbk
-
Posté le 03-07-2005 à 23:53:09  profilanswer
 

Taz a écrit :

qui n'a pas fait un projet avec un discret &>/dev/null planqué dans son Makefile


 
 
j'ai du attendre de bosser pour avoir le hum, plaisir, de jouer avec des makefile, je me sens donc pas concerné [:kbchris]

n°1139128
Elmoricq
Modérateur
Posté le 04-07-2005 à 11:13:48  profilanswer
 

chrisbk a écrit :

elmo : bah essaye avec ta version, si ca a changé tant mieux hein ? :d


 
Je viens de faire un test avec un mini-code qui déclare "truc c;"
 
J'obtiens :
 

test.c: In function `main':
test.c:5: `truc' undeclared (first use in this function)
test.c:5: (Each undeclared identifier is reported only once
test.c:5: for each function it appears in.)
test.c:5: parse error before `c'


(gcc version 2.95.2 19991024)
 
Ils sont pas bien, ces messages d'erreur ?  :??:

n°1139137
super-tupa​pau
Posté le 04-07-2005 à 11:18:54  profilanswer
 

voila le petit exercice de cryptage avec le chiffre de césar
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #define P_SIZE 64
  4. // Fonction display
  5. void display( char *str ){
  6. printf("Chaine: %s\n", str);
  7. fflush(stdout);
  8. }
  9. // Fonction encrypte
  10. int encrypte( char * chaine ){
  11. char new_chaine[P_SIZE];
  12. int i;
  13. // Copier la chaine dans le tableau de caractère
  14. if(!strcpy( new_chaine, chaine)){
  15. perror("strcpy" );
  16. exit(EXIT_FAILURE);
  17. }
  18. for(i=0; i<P_SIZE-1; i++){
  19. // Décaler de trois caractères
  20. new_chaine[i] += 3;
  21. }
  22. // Recopier le tableau de caractère dans la chaine
  23. if(!strcpy( chaine, new_chaine)){
  24. perror("strcpy" );
  25. exit(EXIT_FAILURE);
  26. }
  27. return 0;
  28. }
  29. // Fonction decrypte
  30. int decrypte( char * chaine ){
  31. char new_chaine[P_SIZE];
  32. int i;
  33. // Copier la chaine dans le tableau de caractère
  34. if(!strcpy( new_chaine, chaine)){
  35. perror("strcpy" );
  36. exit(EXIT_FAILURE);
  37. }
  38. for(i=0; i<P_SIZE; i++){
  39. // Décaler de trois caractères
  40. new_chaine[i] -= 3;
  41. }
  42. // Recopier le tableau de caractère dans la chaine
  43. if(!strcpy( chaine, new_chaine)){
  44. perror("strcpy" );
  45. exit(EXIT_FAILURE);
  46. }
  47. return 0;
  48. }
  49. int main(int argc, char ** argv){
  50. // Définition est inisialisation
  51. char *p = malloc(P_SIZE);
  52. FILE *file;
  53. // Vérifier la présence d'un argument
  54. if(argv[1] == 0){
  55. printf("Erreur: aucun fichier fournie\n" );
  56. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  57. exit(EXIT_FAILURE);
  58. }
  59. // Ouvrir un flux de données en lecture seule
  60. if((file = fopen( argv[1], "r" )) == NULL){
  61. perror("fopen" );
  62. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  63. exit(EXIT_FAILURE);
  64. }
  65. // Lire le flux de données
  66. if( !fread( p, sizeof(char), P_SIZE, file) ){
  67. perror("fread" );
  68. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  69. exit(EXIT_FAILURE);
  70. }
  71. // Appel de la fonction d'affichage
  72. display( p );
  73. printf("Encryptage...\n" );
  74. // Encrypter la chaine
  75. if(encrypte( p ) != 0){
  76. printf("Erreur: Impossible d'encrypter la chaine" );
  77. exit(EXIT_FAILURE);
  78. }
  79. // Appel de la fonction d'affichage
  80. display( p );
  81. printf("Decryptage...\n" );
  82. // Decrypter la chaine
  83. if(decrypte( p ) != 0){
  84. printf("Erreur: Impossible de decrypter la chaine" );
  85. exit(EXIT_FAILURE);
  86. }
  87. // Appel de la fonction d'affichage
  88. display( p );
  89. // Fermer le fichier ouvert
  90. fclose(file);
  91. // Demander l'effacement de l'espace alloué
  92. free(p);
  93. return EXIT_SUCCESS;
  94. }


 
Attention: la chaine est limité à 63 caractères

n°1139142
Elmoricq
Modérateur
Posté le 04-07-2005 à 11:21:25  profilanswer
 

J'ai pas le temps de regarder en détail, mais juste comme ça, en passant :

  • EXIT_FAILURE et EXIT_SUCCESS sont définis dans <stddef.h>


  • tu n'as pas testé le code retour de malloc(), en cas d'échec tu vas tenter de stocker le résultat de fread() dans NULL.

n°1139159
super-tupa​pau
Posté le 04-07-2005 à 11:27:52  profilanswer
 

Code :
  1. #include <stddef.h>
  2. ....
  3. char *p = NULL;
  4. ....
  5. if(!(p = malloc(P_SIZE))){
  6. perror("malloc" );
  7. exit(EXIT_FAILURE);
  8. }


 
note: je suis pas sur que malloc retourne sont erreur dans perror

n°1139170
Elmoricq
Modérateur
Posté le 04-07-2005 à 11:31:13  profilanswer
 

Je dois être bigleux, car ce n'est pas ce que je lis dans le code que tu as copié/collé ici. [:pingouino]
 
EDIT : à moins que tu ne veuilles dire que c'est ce que tu vas ajouter/modifier ?


Message édité par Elmoricq le 04-07-2005 à 11:31:58
n°1139171
chrisbk
-
Posté le 04-07-2005 à 11:31:21  profilanswer
 

Elmoricq a écrit :

Je viens de faire un test avec un mini-code qui déclare "truc c;"
 
J'obtiens :
 

test.c: In function `main':
test.c:5: `truc' undeclared (first use in this function)
test.c:5: (Each undeclared identifier is reported only once
test.c:5: for each function it appears in.)
test.c:5: parse error before `c'


(gcc version 2.95.2 19991024)
 
Ils sont pas bien, ces messages d'erreur ?  :??:


 
 
non :o 4 lignes pour un message d'erreur avec redondance d'info(truc undeclared et ensuite une superbe parse error), c'est nul :o
 
 
[cpp]
test2.cpp: Dans function « int main() »:
test2.cpp:5: error: `toto' undeclared (first use this function)
test2.cpp:5: error: (Each undeclared identifier is reported only once for each
   function it appears in.)
test2.cpp:5: error: erreur d'analyse syntaxique before `::' token
[/cpp
comment ca s'invente pas un bordel comme ca[:pingouino]


Message édité par chrisbk le 04-07-2005 à 11:33:57
n°1139176
Elmoricq
Modérateur
Posté le 04-07-2005 à 11:33:42  profilanswer
 

Ah. A force de les voir je les trouve explicites pourtant, et les lignes entre parenthèses ne seront plus indiquées si d'autres erreurs de ce type sont détectées.
Que sortirais un VC sur une erreur de ce type, pour voir ce que ça donne ?

n°1139178
super-tupa​pau
Posté le 04-07-2005 à 11:35:30  profilanswer
 

Citation :

EDIT : à moins que tu ne veuilles dire que c'est ce que tu vas ajouter/modifier ?


 
c'est ce que j'ai ajouter parceque sinon le code prend plein de place c'est pas très pratique mais le revoila en partie corrigé
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <stddef.h>
  4. #define P_SIZE 64
  5. // Fonction display
  6. void display( char *str ){
  7. printf("Chaine: %s\n", str);
  8. fflush(stdout);
  9. }
  10. // Fonction encrypte
  11. int encrypte( char * chaine ){
  12. char new_chaine[P_SIZE];
  13. int i;
  14. // Copier la chaine dans le tableau de caractère
  15. if(!strcpy( new_chaine, chaine)){
  16. perror("strcpy" );
  17. exit(EXIT_FAILURE);
  18. }
  19. for(i=0; i<P_SIZE-1; i++){
  20. // Décaler de trois caractères
  21. new_chaine[i] += 3;
  22. }
  23. // Recopier le tableau de caractère dans la chaine
  24. if(!strcpy( chaine, new_chaine)){
  25. perror("strcpy" );
  26. exit(EXIT_FAILURE);
  27. }
  28. return 0;
  29. }
  30. // Fonction decrypte
  31. int decrypte( char * chaine ){
  32. char new_chaine[P_SIZE];
  33. int i;
  34. // Copier la chaine dans le tableau de caractère
  35. if(!strcpy( new_chaine, chaine)){
  36. perror("strcpy" );
  37. exit(EXIT_FAILURE);
  38. }
  39. for(i=0; i<P_SIZE; i++){
  40. // Décaler de trois caractères
  41. new_chaine[i] -= 3;
  42. }
  43. // Recopier le tableau de caractère dans la chaine
  44. if(!strcpy( chaine, new_chaine)){
  45. perror("strcpy" );
  46. exit(EXIT_FAILURE);
  47. }
  48. return 0;
  49. }
  50. int main(int argc, char ** argv){
  51. // Définition est inisialisation
  52. char *p = NULL;
  53. FILE *file;
  54. if(!(p = malloc(P_SIZE))){
  55. perror("malloc" );
  56. exit(EXIT_FAILURE);
  57. }
  58. // Vérifier la présence d'un argument
  59. if(argv[1] == 0){
  60. printf("Erreur: aucun fichier fournie\n" );
  61. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  62. exit(EXIT_FAILURE);
  63. }
  64. // Ouvrir un flux de données en lecture seule
  65. if((file = fopen( argv[1], "r" )) == NULL){
  66. perror("fopen" );
  67. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  68. exit(EXIT_FAILURE);
  69. }
  70. // Lire le flux de données
  71. if( !fread( p, sizeof(char), P_SIZE, file) ){
  72. perror("fread" );
  73. printf("Syntaxe: %s [ FICHIER ]\n", argv[0]);
  74. exit(EXIT_FAILURE);
  75. }
  76. // Appel de la fonction d'affichage
  77. display( p );
  78. printf("Encryptage...\n" );
  79. // Encrypter la chaine
  80. if(encrypte( p ) != 0){
  81. printf("Erreur: Impossible d'encrypter la chaine" );
  82. exit(EXIT_FAILURE);
  83. }
  84. // Appel de la fonction d'affichage
  85. display( p );
  86. printf("Decryptage...\n" );
  87. // Decrypter la chaine
  88. if(decrypte( p ) != 0){
  89. printf("Erreur: Impossible de decrypter la chaine" );
  90. exit(EXIT_FAILURE);
  91. }
  92. // Appel de la fonction d'affichage
  93. display( p );
  94. // Fermer le fichier ouvert
  95. fclose(file);
  96. // Demander l'effacement de l'espace alloué
  97. free(p);
  98. return EXIT_SUCCESS;
  99. }

n°1139184
chrisbk
-
Posté le 04-07-2005 à 11:38:51  profilanswer
 

Elmoricq a écrit :

Ah. A force de les voir je les trouve explicites pourtant, et les lignes entre parenthèses ne seront plus indiquées si d'autres erreurs de ce type sont détectées.


 
oué mais tu te les vautres pour chaque fonctions et ca me saoule tellement que perso jme suis fait un truc qui filtre ces messages a la con et les degage :d

n°1139189
super-tupa​pau
Posté le 04-07-2005 à 11:40:45  profilanswer
 

s'il vous plait on reviens au sujet [:alizean]

n°1139194
Taz
bisounours-codeur
Posté le 04-07-2005 à 11:42:57  profilanswer
 

pourquoi des fois tu fais des malloc, des fois pas ?

n°1139195
super-tupa​pau
Posté le 04-07-2005 à 11:44:33  profilanswer
 

parce que j'ai pas encore bien compris l'utilité des mallocs et j'ai pas encore recu mon livre K&R  :cry:  
 
( pour gcc je vais tester la version 4.0 )

n°1139199
super-tupa​pau
Posté le 04-07-2005 à 11:46:31  profilanswer
 

voila ce que me donne GCC 4.0:
 
./exo3.c: In function ‘encrypte’:
./exo3.c:20: attention : incompatible implicit declaration of built-in function ‘strcpy’
./exo3.c: In function ‘decrypte’:
./exo3.c:47: attention : incompatible implicit declaration of built-in function ‘strcpy’
 
la version 3.3 ne disez rien

n°1139200
Taz
bisounours-codeur
Posté le 04-07-2005 à 11:46:46  profilanswer
 

dans ton cas, malloc ne te sers à rien, vu que tu alloues une taille connue à la compilation (et petite taille)

n°1139201
chrisbk
-
Posté le 04-07-2005 à 11:47:59  profilanswer
 

(oué mais c'est pour l'exercice, je pense)

n°1139209
super-tupa​pau
Posté le 04-07-2005 à 11:51:22  profilanswer
 

Citation :

(oué mais c'est pour l'exercice, je pense)


 
el muchacho dans l'exo1 me disez

Citation :

1) un programme qui lit une chaine de caracteres, la copie dans une zone memoire que tu alloues et qui l'affiche. (manipulation d'un pointeur)


 
c'est pour ca que j'utilise malloc pour allouer une zone mémoire.
 

Citation :

dans ton cas, malloc ne te sers à rien, vu que tu alloues une taille connue à la compilation (et petite taille)


 
ca ve dire par exemple que l'on pourrais ne pas limiter la taille de la chaine crypté?

n°1139410
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-07-2005 à 14:47:58  profilanswer
 

Elmoricq a écrit :

J'ai pas le temps de regarder en détail, mais juste comme ça, en passant :

  • EXIT_FAILURE et EXIT_SUCCESS sont définis dans <stddef.h>



Non. <stdlib.h>


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1139417
Elmoricq
Modérateur
Posté le 04-07-2005 à 14:52:59  profilanswer
 


 
Je croyais avoir confondu avec un truc, mais non, même pas.
Le jeu du jour : trouver ce que j'ai fumé. Je viens de lire mes fichiers stddef.h, et je vois pas pourquoi j'ai casé EXIT_FAILURE/EXIT_SUCCESS dedans.  :sweat:

n°1139419
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-07-2005 à 14:53:56  profilanswer
 

super-tupapau a écrit :

Code :
  1. if(!(p = malloc(P_SIZE))){
  2. perror("malloc" );
  3. exit(EXIT_FAILURE);
  4. }



Je déconseille de combiner affectation et test dans un if, bien que ce soit parfois utile dans un while.

Citation :

note: je suis pas sur que malloc retourne sont erreur dans perror

Non. malloc() ne lève pas de errno (enfin, une implémentation peut le faire, mais ce n'est pas requis par la norme...).
 
Comme je l'ai déjà indiqué, lorsque malloc() fait une erreur, il retourne NULL, c'est tout.


   T * p = malloc(...)
   if (p != NULL)
   {
      /* ok */
   }
   else
   {
      /* ko */
   }



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1139421
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-07-2005 à 14:56:14  profilanswer
 

chrisbk a écrit :

non :o 4 lignes pour un message d'erreur avec redondance d'info(truc undeclared et ensuite une superbe parse error), c'est nul


C'est pas nul, c'est détaillé, et c'est le résultat de plusieurs mécanismes d'analyse...
 
Fait un reglage 'a-la-Turbo-Pascal' (arrêt de la compilation à la première erreur).
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1139460
chrisbk
-
Posté le 04-07-2005 à 15:22:48  profilanswer
 

Emmanuel Delahaye a écrit :

C'est pas nul, c'est détaillé, et c'est le résultat de plusieurs mécanismes d'analyse...


 
je pige pas bien la parse error

n°1139472
el muchach​o
Comfortably Numb
Posté le 04-07-2005 à 15:36:01  profilanswer
 

chrisbk a écrit :

je pige pas bien la parse error


Ben c'est parfaitement logique, dans la mesure ou au lieu de s'arrêter bêtement comme une mule, gcc va essayer de continuer et aller aussi loin qu'il peut, quitte à s'arrêter plus tard s'il y a 200 msgs d'erreur.
Donc il se dit, je signale que truc n'est pas un type déclaré, et je continue. Et la évidemment, si truc n'est pas déclaré, ça fait une erreur de syntaxe vu que truc n'est non seulement pas un type mais pas non plus un mot-clé.
 
edit: en fait ça ne tient pas vraiment debout, comme explication... :ange:


Message édité par el muchacho le 04-07-2005 à 17:28:46
n°1139474
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-07-2005 à 15:37:28  profilanswer
 

chrisbk a écrit :

je pige pas bien la parse error


Quand il manque un ';' après un tableau ou une structure, c'est la panique et presque tout devient parse error par conséquend. Ne pas oublier que le langage C est orienté 'token' et non 'ligne' comme l'est le preprocesseur... D'autre part, la compilation se fait en une passe, ce qui interdit les erreurs 'précédentes'.
 
Un ';' manquant n'est pas forcément une erreur.  


struct s
{
   int x;
}
 
 
f()
{
}


La fonction retourne un struct s. C'est ok.
 
Ca en devient une si la suite est incohérente.


struct s
{
   int x;
}
 
 
int f()
{
}


Là, il y a 2 types à la suite (struct s int) : syntax error...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1139605
super-tupa​pau
Posté le 04-07-2005 à 17:34:17  profilanswer
 

voila pour malloc:
 

Code :
  1. char *p = malloc(P_SIZE);
  2. if(p == NULL){
  3. printf("malloc n'a pas réussi à allouer l'espace mémoire requis" );
  4. exit(EXIT_FAILURE);
  5. }


Message édité par super-tupapau le 04-07-2005 à 17:35:10
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Résolu] [C#] Déclaration de tableaux d'objets à taille inconnueezPDF => tableaux et position "y"
Probleme super etrange de tableaux superposés [resolu]Bordures des tableaux sous FireFox
css et tableaux?Aligner deux tableaux
Probleme avec tableaux, demande d'aide aux spécialistes![Résolu] tableaux et sessions
les pointeurs - petite aide !Habillage de tableaux?
Plus de sujets relatifs à : les pointeurs , les tableaux ??? je mis perd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR