What does this expression mean, and why does it compile? [duplicate] What does this expression mean, and why does it compile? [duplicate] c c

What does this expression mean, and why does it compile? [duplicate]


It looks like this is a Visual C++ extension to support a particular 'no function defined' idiom. From the warning C4353 page:

// C4353.cpp// compile with: /W1void MyPrintf(void){};#define X 0#if X   #define DBPRINT MyPrint#else   #define DBPRINT 0   // C4353 expected#endifint main(){    DBPRINT();}

the intention being that DBPRINT is a no-op. The warning suggests #define DBPRINT __noop instead, using VC's __noop extension instead.

If you view the assembly listing for your output you'll see the second clause is omitted, even in debug mode.


Guess it was interpreted as

if((1 == 2) || NULL (-4 > 2))  printf("Hello");

where NULL is a function-pointer, by default returning int... What at actually happens in runtime is platform-dependent


Visual Studio 2012 gives you the following warning:

warning C4353: nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead

it is a non-standard way to insert a "no operation" assembler instruction at that point of expression evaluation