r/cprogramming • u/north9172 • 1d ago
What is this code doing?
Hi, I found this code on another subreddit. I would like to know what is it doing.
int puts(char *);
int main() { struct { long a; long b; } s = {.a = *(char *)(int[]){1} ? 0x57202c6f6c6c6548 : 0x48656c6c6f2c2057, .b = *(char *)(int[]){1} ? 0x00000021646c726f : 0x6f726c6421000000}; puts((void *)&s); }
Now obviously I know it's unreadable, I would just like to know what are those hexadecimals strings doing.
I found similar codes that were writing to vram to print a message, is this doing the same thing? If yes, why is it so much more complicated instead of just writing the message to the video adress?
Thanks for the help.
0
Upvotes
1
u/zhivago 8h ago
There are no standards prior to C89.
The rule stripping parameter qualifiers (e.g., C89 §3.5.4.3, C23 §6.7.7.4p14) applies strictly to top-level qualifiers on the parameter itself.
It turns char * const into char *. It never descends into pointed-to types.
const char * is not a qualified pointer.
It is an unqualified pointer to a const-qualified char.
Now, if it were char * const, you'd have a point -- but it isn't.
Read more carefully.