gcc 4.1.2를 사용하여 RHEL 5.1 64 비트 플랫폼에서 실행 중입니다.64 비트 시스템에서 NULL 정의 문제가 발생했습니다.
void str_concat(char *buff, int buffSize, ...);
마지막 인수는 NULL이어야 인수의 끝을 지정하는 동안, 가변 목록 (...)에 전달 된 문자 *를 concats :
나는 유틸리티 기능을 가지고있다. 64 비트 시스템에서는 NULL이 8 바이트입니다.
문제가 생겼습니다. 내 응용 프로그램은 직접/간접적으로 2 stddef.h 파일을 포함합니다.
첫번째는 다음과 같이 정의 NULL /usr/include/linux/stddef.h이다
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
두번째 인은/usr/LIB/GCC/x86_64에-레드햇 리눅스/4.1.2/포함/stddef.h와 1 일 정수 0 (4 바이트)로 정의하면서, __null (8 바이트)로 NULL 정의부터 물론
#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 일이 필요합니다.
/usr/include/linux/stddef.h가 inderectly에 포함되지 않도록 어떻게합니까?
UPD :
컴파일 라인은 매우 간단합니다 :
그램 ++ -Wall -fmessage 길이 = 당신의 많은 무효 (통과하는 것이 좋다 0 -g -pthread
*) 0. 이것은 물론 작동합니다. 그 기능이 많은 곳에서 사용된다는 문제는 많은 곳을 의미합니다. 나는 C++ 표준이 약속하는 해결책을 찾고 싶다 - 8 바이트 크기의 NULL.
컴파일 경로가 있으면 포함 경로에있는 디렉토리를 볼 수 있습니다. –
생성 된 어셈블리 출력을 볼 수 있습니까? – Malkocoglu
NULL이 NULL로 대체되었음을 증명하기 위해 파일 (gcc -E)을 사전 처리합니다. – dimba