Re: OFF-TOPIC : Confusion about basic C program behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Just a thought, but not a particularly educated one. Compiling with -Wall gives me:

test.c:4: warning: return type defaults to `int'
test.c: In function `main':
test.c:15: warning: int format, double arg (arg 3)
test.c:16: warning: int format, double arg (arg 2)
test.c:18: warning: int format, double arg (arg 2)
test.c:18: warning: int format, double arg (arg 3)
test.c:20: warning: control reaches end of non-void function

Looks like maybe the floats are automatically promoted to doubles before they are passed to printf. I don't know if that's standard behaviour, but it seems reasonable. So then in the first case, two 64-bit values are put on the stack, and two 64-bit values are taken off the stack.

In the second case, two 64-bit values are put on the stack, one 64-bit value is taken off the stack and presented correctly, and one 64-bit value has only the first 32 bits read, and misinterpreted as a signed int.

In the third case, two 64-bit values are put on the stack, and the first 32 bits are interpreted as the first signed int, and the second next 64 are interpreted as a double. So case 3 is different from case 2 in that the double value in case 3 is made up of two halves of two different doubles, while in case 2 the double is made from an actual double.

Or something like that.

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux