int main(void)
{
return(\'yes\', *\"no\", **main, *********printf) (\"hello world!\\n\") *0;
}
outputs hello world!
, but how does it
Two things really:
*main == main
So if we simplify the pointers:
int main(void)
{
return('yes', *"no", main, printf) ("hello world!\n") *0;
}
And using the last element in the list as the value of the list
int main(void)
{
return printf("hello world!\n") *0;
}
printf
returns the number of characters printed
int main(void)
{
return 13 *0;
}
And 13*0 is left as an exercise to the reader.
('yes', *"no", **main, *********printf)
will evaluate to *********printf
, because comma operator evaluates its operands and returns value of last expression. *********printf
is equal to printf, as dereferencing function pointer results in the same function pointer; it does nothing.
Next, result of first parenthesis, printf, is applied to ("hello world!\n") which results in text printed to screen. printf function returns number of characters written. That number is then multiplied with 0 and product is returned by main function.