[cfe-users] Why is clang defining NULL as __null ??

pendyala syam via cfe-users cfe-users at lists.llvm.org
Mon Nov 4 09:15:23 PST 2019

I have a .cpp file which has usage of *NULL* at several places. When I try
to compile this cpp file for Android/x86 platform using clang++ on Windows
machine + standalone tool chain, I am running into "expected expression"
error at the places where *NULL* is used. I find the definition of *NULL* in
stddef.h of clang headers provided by Android NDK as below.

#if defined(__need_NULL)#undef NULL#ifdef __cplusplus#  if
!defined(__MINGW32__) && !defined(_MSC_VER)#    define NULL __null#
else#    define NULL 0#  endif#else#  define NULL ((void*)0)#endif

As far as I know, __null is specific to GNU compiler. In my case both
_MSC_VER and __MINGW32__ are undefined because I am compiling for Android
platform using clang++ and standalone tool chain. So it is hitting into define
NULL __null. Since clang++ has no clue of what __null is, it is resulting
into "expected expression" error.

My question is, why is clang using macros(like __null) provided by GNU
compiler? Or am I missing something here?

Could somebody please help me understand. Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20191104/967fb157/attachment.html>

More information about the cfe-users mailing list