LoginSignup
1
1

More than 5 years have passed since last update.

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

Posted at

数十ヶ月ぶりに,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でコンパイル.jpg

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

警告抑止

警告抑止.jpg

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

バージョン

バージョン.jpg

わざわざ警告抑止をせず,コンパイルエラーも出さず,配列範囲外に踏み込めるコンパイラはないのだろうか.
もしくは,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

1
1
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1