Je suis en cours d'exécution sur plate-forme RHEL 5.1 64 bits à l'aide de gcc 4.1.2.Problème de définition NULL sur le système 64 bits
J'ai une fonction d'utilité:
void str_concat(char *buff, int buffSize, ...);
qui concats char * dans liste variadique (...), alors que le dernier argument doit être NULL, pour désigner fin des arguments. Sur le système 64 bits, la valeur NULL est de 8 octets.
Maintenant, au problème. Mon application inclut directement/indirectement 2 fichiers stddef.h.
première est /usr/include/linux/stddef.h qui définit NULL comme suit:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
La seconde est une /usr/lib/gcc/x86_64-redhat-Linux/4.1.2/include/stddef.h
#if defined (_STDDEF_H) || defined (__need_NULL)
#undef NULL /* in case <stdio.h> has defined it. */
#ifdef __GNUG__
#define NULL __null
#else /* G++ */
#ifndef __cplusplus
#define NULL ((void *)0)
#else /* C++ */
#define NULL 0
#endif /* C++ */
#endif /* G++ */
#endif /* NULL not defined and <stddef.h> or need NULL. */
#undef __need_NULL
Bien sûr, je dois le 2ème, car il définit NULL comme __null (8 octets), tandis que le 1er un définit comme entier 0 (4 octets). Comment éviter que /usr/include/linux/stddef.h soit inclus de manière indirecte?
UPD:
ligne de compilation est assez simple:
g ++ -Wall -fmessage longueur = 0 -g -pthread
Beaucoup d'entre vous a conseillé de passer (void *) 0. Cela va bien sûr fonctionner. Le problème que la fonction est utilisée dans beaucoup, je veux dire beaucoup d'endroits. Je voudrais trouver une solution qui me donnera ce que le standard C++ promet - NULL de 8 octets.
Il serait utile si nous avions votre ligne de compilation, pour voir les répertoires dans le chemin d'inclusion. –
Est-il possible de voir la sortie de l'assemblage générée? – Malkocoglu
Je prétraiter le fichier (gcc -E) pour prouver que la valeur NULL est remplacée par 0. – dimba