char c[] = "";
int i = (c) ? strlen(c) : NULL + 2;
Во-первых, при компиляции gcc будет ругаться на арифметику с void* (NULL+2 == ((void*)0)+2).
Во-вторых, gcc будет ругаться на то, что strlen(c) имеет тип int, а NULL+2 -- тип void* (два последних операнда для `?:' должны быть одного типа).
Во-третьих, в результате i будет равно не 2 (как ожидалось), а 0.