If you're careful to use NULL only in pointer expressions, it can be used to indicate that a pointer is being tested, as opposed to any other sort of integer or boolean flag. You can justify it on grounds similar to Hungarian notation, giving the reader some contextual information that might otherwise require a look at a declaration somewhere else.
Code should be written for the benefit of humans, not compilers.
I agree, but the humans also need to be able to understand the code.
I've worked in places where the ternary operator was banned because 'some people might not understand it'. This is silly.
Code should be written for the benefit of humans, not compilers.