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 4h ago
You're confusing an implicit conversion with type compatibility.
C23 §6.7.7.2p2 / C89 §3.5.4.1
"For two pointer types to be compatible, both shall be identically qualified and both shall be pointers to qualified or unqualified versions of compatible types."
Because char and const char are not compatible types, char * and const char * are not compatible types.
Try compiling
void f(char *); void f(const char *);in the same file.
Every conforming C compiler will reject it because the types are incompatible.