Bonjour,

Pour des soucis pratique j'ai écris des fonctions retournant une structure comme celle-ci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct {
  int code;
  char label[RET_LABEL_SIZE+1];
} RET_Value;
 
RET_Value IN_WaitForFile(xxx) {
  RET_Value ret;
  .....
  ret.code = -1;
  strcpy(ret.label, "Cause de l'erreur");
  return ret;
}
 
main() {
  RET_Value ret;
  ...
  ret = RET_Value IN_WaitForFile(xxx);
  if(ret.code == -1) {
    printf("Erreur: %s\n", ret.label);
  }
}
Cela me permet de transporter le code d'erreur et son libellé d'appellant en appellant (genre Exception en Java).

On (un collègue) m'a dis que c'était une grave erreur car l'espace mémoire pour la valeur retournée n'est alloué que dans la fonction IN_WaitForFile et peut être écrasé avant son utilisation dans le main.

Est-ce vrai ?

PS: je sais que c'est pas super propre, ni super efficace