連載
» 2018年10月25日 10時00分 公開

山浦恒央の“くみこみ”な話(111):バグ検出ドリル(11)コンパイルエラーは意外に難しい (2/3)

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

4.今回の問題

問題文:コンパイルエラーとなるプログラム(リスト1)と、各行のエラーメッセージ(リスト2)を示す。コンパイルエラーとならないように修正せよ。正しく修正すると、リスト3の結果となる。ただし、以下の点に注意すること。

  1. コンパイルエラーの原因は、1つではない。あらゆる視点から原因を考察すること
  2. エラーメッセージは、Visual Studioで実行した結果とする
01 /*
02 	線形探索プログラム
03 	
04 	仕様:変数in0の値が、配列num1にあるか検索するプログラムである。
05 		 見つかった場合は、「見つかりました」と表示する。
06 		  見つからない場合は、何も表示しない。
07 */
08 
09 #include <stdio.h>
10 int main(void)
11 {
12 	int i;
13   int in0 = 7;
14 	int num1[10]={3,10,4,5,6,1,8,2,9,7};
15 
16 	for (i = 0; i < 10 i++) {
17 		if (inO == numl[i]){
18 			prntf("見つかりました\n");
19 		}
20 	}
21 
22 	return 0:
23 }
24 
リスト1 エラー付き線形探索プログラム

(13): error C3872: '0x3000': この文字を識別子で使用することはできません
(13): error C3872: '0x3000': この文字を識別子で使用することはできません
(13): error C2065: '  int' : 定義されていない識別子です。
(13): error C2146: 構文エラー : ';' が、識別子 'in0' の前に必要です。
(13): error C2065: 'in0' : 定義されていない識別子です。
(14): error C2143: 構文エラー : ';' が '型' の前にありません。
(16): error C2146: 構文エラー : ';' が、識別子 'i' の前に必要です。
(16): error C2059: 構文エラー : ')'
(16): error C2143: 構文エラー : ')' が '{' の前にありません。
(17): error C2065: 'inO' : 定義されていない識別子です。
(17): error C2065: 'numl' : 定義されていない識別子です。
(17): error C2109: 配列または、ポインターでない変数に添字が使われました。
(18): warning C4013: 関数 'prntf' は定義されていません。int 型の値を返す外部関数と見なします。
(22): error C2143: 構文エラー : ';' が ':' の前にありません。
リスト2 エラーメッセージ一覧

見つかりました
リスト3 エラー修正後の実行結果例

Copyright © ITmedia, Inc. All Rights Reserved.