Salut
Bon voilà, j'aimerais bien quelques conseils de votre part...
Tout d'abord, j'aimerais savoir comment bien utiliser les outils permettant de sortir d'une fonction, j'entend par là return et exit().
Pour le moment, je travaille de cette manière :
Le seul inconvénient que je trouve actuellement à cette méthode est que l'on s'y perd assez rapidement, et que ça peut devenir assez pénible à décoder dans certains cas...
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
22
23
24 int ma_fonction_exemple(void) { FILE *fp = NULL; /* Valeur de retour */ int ret_value = EXIT_SUCCESS; /* Appels de fonctions, etc. Par exemple : */ fp = fopen("monfichier.dat", "rb"); if(fp != NULL) { /* Traitement */ fclose(fp); } else { fprintf(stderr, "Erreur !"); ret_value = EXIT_FAILURE; } return ret_value; }
Parcontre il m'est souvent arrivé de lire ceci :
Est-ce que cette dernière méthode est conseillée/propre ? L'utilisez-vous ? Si oui, pourquoi ?
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
22
23 int ma_fonction_exemple(void) { FILE *fp = NULL; /* Appels de fonctions, etc. Par exemple : */ fp = fopen("monfichier.dat", "rb"); if(fp == NULL) { fprintf(stderr, "Erreur !"); return EXIT_FAILURE; /* Je retrouve aussi la forme suivante : exit(-1); */ } /* Traitement */ fclose(fp); return EXIT_SUCCESS; }
Ensuite, j'aimerais votre avis sur la fonction suivante :
C'est une fonction qui découpe la chaine de caractère fournie en paramètre en adresse ethernet. Ce résultat est stocké sous la forme d'une struct ether_addr (dont j'ai imité la forme, car je travaille sous Windows).
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
22
23
24
25
26
27
28
29
30
31
32
33 int get_hw_addr(struct ether_addr *mac, char *s) { char *p = NULL; char delim[] = ":"; int ret_value = EXIT_SUCCESS; int i = 0; /* Premier octet */ p = strtok(s, delim); if(p != NULL) mac->octet[i] = (u_char)strtol(p, NULL, 16); else ret_value = EXIT_FAILURE; i++; /* 5 octets suivants */ while(i < 6 && p != NULL) { p = strtok(NULL, delim); if(p != NULL) mac->octet[i] = (u_char)strtol(p, NULL, 16); else ret_value = EXIT_FAILURE; i++; } return ret_value; }
Pour le moment, j'ai quelques problèmes : je ne sais pas comment repérer toutes les erreurs qui pourraient intervenir... Par exemple si on utilise une lettre ne faisait pas partie de l'intervalle hexadécimal, strtol renvoie 0, et donc mon adresse ethernet comportera l'octet 0, ce qui n'était pas voulu...
Je voudrais aussi savoir si mon utilisation de strtok est correcte ?
Merci d'avance pour vos conseils![]()
Fred
Partager