Я работаю на RHEL 5.1 64-битной платформе с использованием gcc 4.1.2.Проблема определения NULL на 64-битной системе
У меня есть функция полезности:
void str_concat(char *buff, int buffSize, ...);
которого concats символа * принятый в VARIADIC списка (...), в то время как последний аргумент должен быть NULL для обозначения конца аргументов. В 64-битной системе NULL составляет 8 байтов.
Теперь проблема. Мое приложение включает прямо/косвенно 2 файла stddef.h.
Первый из них является /usr/include/linux/stddef.h, который определяет значение NULL следующим образом:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
Второй является /USR/Библиотека/GCC/x86_64-RedHat-Linux/4.1.2/включить/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
конечно мне нужно 2-ым, так как она определяет NULL, как __null (8 байт), в то время как первый один определяет его как целое число 0 (4 байта).
Как предотвратить включение /usr/include/linux/stddef.h?
UPD:
Компиляция линия довольно проста:
г ++ -Wall -fmessage длина = 0 -g -pthread
Многие из вас посоветовали пройти (недействительными *) 0. Это, конечно, сработает. Проблема в том, что функция используется во многих, я имею в виду много мест. Я хотел бы найти решение, которое даст мне то, что предлагает C++ стандартное обещание - NULL размером 8 байтов.
Это поможет, если бы у нас была ваша строка компиляции, чтобы увидеть каталоги в пути включения. –
Возможно ли, чтобы сгенерировался выход сборки? – Malkocoglu
I preprocess file (gcc -E), чтобы доказать, что NULL заменяет на 0. – dimba