知能情報工学演習I(岩村担当分)

演習後半ではC言語をやります。 林 晴比古著の 「新C言語入門 ビギナー編」 を参考にします。

授業の内容、課題

  1. 5月29日:プログラミング環境(テキスト1,2章)
  2. 6月 5日:変数とデータ型(3章) 、演算子(4章)
  3. 6月12日:コンソール入出力(6章) 、配列(3章)、数学処理の標準ライブラリ(11章)
  4. 6月19日:制御文1 (テキスト5章)
  5. 6月26日:制御文2(テキスト5章)
  6. 7月10日:関数(テキスト7章)、プリプロセッサ(テキスト10章)
  7. 7月17日:応用プログラム

おまけ


  1. 5月29日

  2. 6月5日

  3. 6月12日
  4. 6月19日
  5. 6月26日
  6. 7月10日
  7. 7月17日

デバッガーgdbの簡単な使い方

Segmentation faultが発生するプログラム:aaa.c
#include <stdio.h>
 
int main(void) {
  int a[2];
  a[0] = 10;
  a[1] = 20;
  a[100000] = 30;
 
  printf("a[0] = %d\n", a[0]);
  printf("a[1] = %d\n", a[1]);
  printf("a[100000] = %d\n", a[100000]);
 
  return 0;
}
  1. 「-g」をつけてコンパイルする。
     gcc aaa.c -g
    
  2. 実行形式(この場合はa.out)を指定してgdbを実行する。
    gdb a.out
    
  3. 画面にgdbのメッセージと「(gdb)」というプロンプトが表示される。
    GNU gdb Red Hat Linux (6.0post-0.20040223.17rh)
    Copyright 2004 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1".
     
    (gdb)
    
  4. runと打つと、プログラムが実行され、エラーの箇所で止まる。 この場合は7行目でSegmentation faultが起こったことがわかる。
    (gdb) run
    Starting program: /home/nt/tmi00113/unix/a.out
     
    Program received signal SIGSEGV, Segmentation fault.
    main () at aaa.c:7
    7         a[100000] = 30;
    (gdb)
    
  5. 変数の値を表示する「print」や、エラーの場所を特定する「where」などのコマンドを必要に応じて使う(今回は省略)。
  6. 終了するときは「quit」と入力する。 「The program is running. Exit anyway? (y or n)」と聞かれる場合は「y」と入力すると終了する。
     (gdb) quit
    The program is running.  Exit anyway? (y or n) y
    

参考:ファイヤープロジェクト


10進数、8進数、16進数の対応表

10進数 8進数 16進数
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 10 8
9 11 9
10 12 A
11 13 B
12 14 C
13 15 D
14 16 E
15 17 F
16 20 10

岩村 雅一(いわむら まさかず) <masa@cs.osakafu-u.ac.jp>