数十ヶ月ぶりに,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