In modern C++ (C++11 and later):
NULL is still defined, but it’s only a legacy macro, not a keyword.
It is defined in (and also in many headers that transitively include <stddef.h>).
#include // defines NULL as 0 or ((void*)0)
In C++11 and beyond, we should prefer nullptr instead of NULL, since nullptr has a dedicated type (std::nullptr_t) and avoids overload ambiguity.