30775


以前、PPCGで以下の問題を回答しました。  
[Make a “Ceeeeeeee”
program](https://codegolf.stackexchange.com/a/100614/56344)

[code]

    char x[];i;m(char*v,c){for(x[i]=*v;*v;)*++v-c?printf("%s%s\n",x,v):(x[++i]=c);}
    
[/code]

実行結果:  
`Make a "Ceeeeeeee" program`, `e`:

[code]

    Make a "Ceeeeeeee" program
    Mke a "Ceeeeeeee" program
    Me a "Ceeeeeeee" program
    Mea "Ceeeeeeee" program
    Me "Ceeeeeeee" program
    Me"Ceeeeeeee" program
    MeCeeeeeeee" program
    Meeeeeeeee" program
    Meeeeeeeee program
    Meeeeeeeeeprogram
    Meeeeeeeeerogram
    Meeeeeeeeeogram
    Meeeeeeeeegram
    Meeeeeeeeeram
    Meeeeeeeeeam
    Meeeeeeeeem
    Meeeeeeeee
    
[/code]

配列の要素数が無い(未記述)の場合でも、正しい結果を出せてしまうのか不思議です。  
これは一体何故なのか、ご存知の方ご教授を宜しくお願いします。


CC BY-SA 3.0
2016-11-29T11:34:51.227
30774
2016-11-29T12:03:24.637
2017-04-13T12:39:29.410
-1
question
c
配列の要素数が未記述の場合の動作


ファイルスコープ（つまり大域変数として）で  
`char x[];`  
のようにした場合、暗黙的に（要素が１つあるとする）  
`char x[1];`  
だと見なされます。  
それで、`x[0]`に対する読み書きはＯＫです。  
しかし、`x[10]`など要素数以上の要素に書いたり読み出したりした結果は動作未定義です。  
正常に動作するように見えるかもしれませんし、正常に動作しないかもしれないし、セグメントフォールトを起こすかもしれません。

Ｃコンパイラは配列へのアクセスの範囲チェックは基本行わないので、コンパイルはできてしまいます。


CC BY-SA 3.0
2016-11-29T11:49:39.563
30775
2016-11-29T11:56:10.270
2016-11-29T11:56:10.270
5044
5044
30774
answer