Vérification des pointeurs NULL en C/C : comparaison des méthodes
Dans les revues de code, le sujet de la vérification des pointeurs NULL revient souvent. Un contributeur préconise l'utilisation de comparaisons explicites avec NULL :
int * some_ptr; // ... if (some_ptr == NULL) { // Handle null-pointer error } else { // Proceed }
Une autre partie estime que la vérification implicite de NULL en utilisant la variable pointeur dans une instruction if est tout aussi claire :
int * some_ptr; // ... if (some_ptr) { // Proceed } else { // Handle null-pointer error }
Ceci cette dernière méthode est préférée pour plusieurs raisons. Premièrement, il évite le risque d'introduire des erreurs logiques telles que l'attribution de NULL à la variable pointeur au lieu de la comparer :
if (some_ptr = NULL)
Deuxièmement, il est compatible avec les classes C comme unique_ptr, shared_ptr et auto_ptr qui agissent comme pointeurs mais fournissent des conversions en booléen. Une comparaison explicite avec NULL nécessiterait une conversion en pointeur, ce qui peut avoir des effets secondaires ou être moins efficace.
Les comparaisons explicites avec NULL sont inutilement verbeuses et introduisent une confusion potentielle. Le langage C indique explicitement que les valeurs non nulles dans des contextes booléens sont vraies et que les valeurs nulles sont fausses. L'utilisation de vérifications implicites pour NULL est claire et concise, exprimant l'intention du code sans spécificité redondante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!