mirror of
git://git.musl-libc.org/musl
synced 2024-12-25 08:02:28 +00:00
c8a9c22173
unfortunately this eliminates the ability of the compiler to diagnose some dangerous/incorrect usage, but POSIX requires (as an extension to the C language, i.e. CX shaded) that NULL have type void *. plain C allows it to be defined as any null pointer constant. the definition 0L is preserved for C++ rather than reverting to plain 0 to avoid dangerous behavior in non-conforming programs which use NULL as a variadic sentinel. (it's impossible to use (void *)0 for C++ since C++ lacks the proper implicit pointer conversions, and other popular alternatives like the GCC __null extension seem non-conforming to the standard's requirements.)
23 lines
399 B
C
23 lines
399 B
C
#ifndef _STDDEF_H
|
|
#define _STDDEF_H
|
|
|
|
#ifdef __cplusplus
|
|
#define NULL 0L
|
|
#else
|
|
#define NULL ((void*)0)
|
|
#endif
|
|
|
|
#define __NEED_ptrdiff_t
|
|
#define __NEED_size_t
|
|
#define __NEED_wchar_t
|
|
|
|
#include <bits/alltypes.h>
|
|
|
|
#if __GNUC__ > 3
|
|
#define offsetof(type, member) __builtin_offsetof(type, member)
|
|
#else
|
|
#define offsetof(type, member) ((size_t)( (char *)&(((type *)0)->member) - (char *)0 ))
|
|
#endif
|
|
|
|
#endif
|