Hello fellow explorers
I have come to notice what you may have long long ago.
Comparing simple lines of code
alignas(16) __uint128_t u128 = 72623859790382856;
printf("%x\n", (int)u128 );
printf("%llx \n", u128 );
printf("%llx \n", &u128 );
printf("%llx address ? \n", (uint64_t*)&u128 );
printf("%llx \n", (uint64_t)u128 );
From locally,
x86-64 gcc (8.3 | 10.1) -march=core2 -std=gnu++1z -dM -xc++ -O3 -mwindows -mconsole (windows 7 | 10), outputs
5060708
22fd80
22fd90
22fd90 address ?
102030405060708
, which are obviously output three memory pointer addresses, and two values, and are
to the standard? on windows?
From Compiler Explorer, ( -mwindows -mconsole not recognized)
x86-64 gcc 10.1 -march=core2 -std=gnu++1z -dM -xc++ -O3 , outputs
5060708
102030405060708
7ffeaa2fd530
7ffeaa2fd530 address ?
102030405060708
( clang 10, icc 19 produced similar output as gcc on CE )
Second output line is one observed possible difference.
I am assuming Compiler Explorer is Linux.
Thanks.