gccできめぇ実験.

ショートコーディングにおいて,大量の配列を宣言するとき

a['ZZZ'];

と宣言するテクニックがある.それを解析する.


プログラム

#include
int main(){
long long int a;
a='012';
printf("%x\n",a);
a='012345';
printf("%llx\n",a);
printf("%llx\n",'012345');
printf("%c %c %c %c %c %c\n",
( (char*)&a)[0],((char*)&a)[1],( (char*)&a)[2],
( (char*)&a)[3],((char*)&a)[4],( (char*)&a)[5]);
}


結果はこちら

303132
32333435
32333435
5 4 3 2

ちなみに30が'0',31が'1',・・・ である.


まじ,((char*)&a)[1]とかきめぇな.よい子は真似しないでね


まず,文字定数は4byte( sizeof(int) )であることが分かるだろう.
01はメモリ外で情報が消えている.

トルエンディアンで"012345"の前4byteの値をとってきているのだろうか.
まぁ,そんな感じの値は出ている.

ちなみに,(long long int) '012345'しても4文字のままだった.


結論: 文字定数はint型.2文字以上書けるコンパイラもあるけど,書式守れよ?