У меня есть файл .cpp, который использует NULL в нескольких местах. Когда я пытаюсь скомпилировать этот файл cpp для платформы Android / x86, используя clang ++ на Windows-машине + отдельная цепочка инструментов, я сталкиваюсь с ошибкой «ожидаемое выражение» в местах, где используется NULL . Я нахожу определение NULL в stddef.h заголовков clang, предоставляемых Android NDK, как показано ниже.
#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
Насколько я знаю, __null
относится к компилятору GNU. В моем случае и _MSC_VER, и __MINGW32__
не определены, потому что я компилирую для платформы Android, используя clang ++ и отдельную цепочку инструментов. Таким образом, он попадает в define NULL __null
. Поскольку clang ++ не имеет ни малейшего представления о том, что такое __null
, это приводит к ошибке «ожидаемое выражение».
Мой вопрос заключается в том, почему clang использует макросы (например, __null
), предоставляемые компилятором GNU? Или я что-то здесь упускаю?
Может кто-нибудь помочь мне понять. Спасибо