Вообще говоря, в расширении всегда следует указывать аргументы макроса в скобках, т. Е. В вашем случае
assert((x) != (void*) 0)
Это потому, что если вы этого не сделаете, то любые выражения (а не простые переменные), которые вы передаете, могут испортить расширение переменной.
Я бы также посоветовал вам не ставить точку с запятой в конце определения макроса, чтобы вы называли его как
NULLCHECK(pSomething);
, который выглядит более похожим на C и совместимым с остальным кодом.