2010-05-18 4 views

Répondre

26

Vous ne pouvez pas.

Au lieu de cela, l'initialiser avec NULL et vérifier si elle est NULL:

char *foo = NULL; 
... 
if(!foo) { /* shorter way of saying if(foo == NULL) */ 
7

Vous ne pouvez pas tester au moment de l'exécution de manière indépendante de la plate-forme. Faire n'importe quoi avec une valeur non initialisée autre que l'assigner à lui est un comportement indéfini. Regardez la source et analysez le flux de code.

Il se peut que votre compilateur initialise la mémoire de pile avec une valeur particulière, et vous pouvez tester cette valeur. Ce n'est pas portable même avec le même compilateur avec des drapeaux différents (parce que la norme ne l'exige pas, et cela peut seulement arriver en mode débogage), et ce n'est pas fiable parce que vous pourriez avoir assigné la valeur magique.

Ce que vous feriez normalement dans ce cas est d'initialiser le pointeur sur NULL (de manière équivalente, 0), puis de tester ultérieurement s'il s'agit de NULL. Cela ne vous indique pas si vous lui avez affecté la valeur NULL dans l'intervalle, mais il vous indique si vous avez affecté une valeur "utile".

+0

Si c'est un global, il serait initialisé. –

+1

@Carl: vrai, bien qu'il ne soit toujours pas possible de tester si elle a été assignée à. –

0

Votre variable est définie/déclarée tout simplement pas initialisé. Vous pouvez vérifier si votre variable a une valeur en l'initialisant d'abord lorsque vous la déclarez. Puis plus tard, vous pouvez vérifier s'il a cette valeur initiale.

char *foo = NULL; 


//... 

if(foo) 
{ 
} 
Questions connexes