C言語の配列は勉強できない仕様に変わったのか?


数十ヶ月ぶりに,C言語の勉強をしようと思い,ポインタ関係の書籍を開いた.
そして,配列の領域外を参照したプログラムをコンパイルしたとき,警告が出てきて驚いた.
昔は出てこなかったはずなのだが・・・.

hoge.c
#include <stdio.h>

int main( void )
{
    int dat[5] = {0};
    int i;

    printf( "Start\n" );

    /* 隊を表示 */
    for ( i = 0; i < 5; i++ ) {
        printf("dat[%d] %d %p\n", i, dat[i], &dat[i] );
    }

    /* 存在しない要素を表示 */
    printf("dat[5] %d %p\n", dat[5], &dat[5] );

    printf( "End\n" );

    return 0;
}

c89規格ですら警告が出てしまった.

警告抑止

コンパイル時に,警告が出ないようにするのはおかしいと思う.
しかし,解決方法がない.

バージョン

わざわざ警告抑止をせず,コンパイルエラーも出さず,配列範囲外に踏み込めるコンパイラはないのだろうか.
もしくは,OSの問題か?

OS:OS X Yosemite 10.10.5

書籍に使用しているバージョンが記載されていないからな・・・.
根本的に10年以上前の書籍を使っていることに問題があるのだろうか...
たかが配列外を参照するだけの作業に数時間を費やしたorz
(しかも,本来の作業からずれたことに,数時間を浪費する)

結論

気にしないことにした.
別に,警告が出るからとは言え,勉強は継続できる(支障は出ない).

参考URL

gccのインストール:http://qiita.com/ShinichiOkayama/items/962e55ac7f8920a5f007
バージョンを根本から変更するための手順:http://qiita.com/Hiroki11x/items/261612c142da176bbba5
古いgccコマンドオプション一覧:http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html
コンパイラオプション一覧:http://wwweic.eri.u-tokyo.ac.jp/computer/manual/altix/compile/Fortran/Intel_Fdoc91/main_for/mergedProjects/copts_for/common_content/options_ref_cross_refs_for.htm
GNU gcc警告オプション:http://www.unixuser.org/~euske/doc/gccopts/
一部の警告をエラー扱いに変更:http://www.metareal.org/2008/12/12/gcc-options-request-or-suppress-warnings-and-errors/

オプション使用例:http://wwwcs23.cs.kobe-u.ac.jp/~mori/4students/enshu/enshu2.2006/MORI/gcc.html

C99の仕様:http://www.buildinsider.net/language/clang/01
IBMのc99:https://www.ibm.com/developerworks/jp/linux/library/l-c99/
MacでC言語:http://n-hiroki-prog.hatenablog.com/entry/2016/06/04/212428
今回に無関係なサイト(アセンブリ表示):http://qiita.com/kaityo256/items/d04d2980b7f9633b735b