下記に解答を示します。
各エラーの詳細は以下で解説します。
エラー・メッセージには、以下が書いてあります。
(13): error C3872: '0x3000': この文字を識別子で使用することはできません
つまり、「使えない文字が入っている」ということですね。13行目をご覧ください。一見、何がおかしいか分かりませんが、実は、全角スペースが混じっているのです。本問題では、13行目に全角スペースが混じっています。全角と半角の違いは画面上では見えないので、初心者が戸惑う原因の一つです。
次は、以下のエラー・メッセージです。
(16): error C2146: 構文エラー : ';' が、識別子 'i' の前に必要です。
これは、for文の「i < 10」の最後にセミコロンが付いていないために出るメッセージです。日本語では、文の最後に「。」を付けますが、プログラミングではセミコロンですね。特に、for文は、初めて書く人には分かりにくいため、セミコロンを忘れることがあります。
次は、以下のメッセージです。
(17): error C2065: 'inO' : 定義されていない識別子です。
エラーの原因が分かったでしょうか。これは「ゼロ」と「オー」の違いです。宣言では、in0(ゼロ)なのですが、17行目では、inO(オー)となっており、定義していない識別子を使っているとのエラーが出ました。これは、筆者もたまにだまされます。特に、他人のプログラムを写していると、違いが分かりにくいですね。
以下のメッセージをご覧ください
(17): error C2065: 'numl' : 定義されていない識別子です。
これは、1(イチ)とl(エル)の違いです。1とlって、非常に見づらいですね。これも見間違うことがあるでしょう。
学生の「頻出コンパイルエラー」の銀メダルが、printfだと思います※4)。以下のメッセージをご覧ください。
(18): warning C4013: 関数 'prntf' は定義されていません。int 型の値を返す外部関数と見なします。
よく見ると、prntfとなっています。標準関数も初めてタイプする時は、間違うことがありますね。皆さんも間違えたことがきっとあるはずです。
※4)初心者が間違えるコンパイルエラーの「金メダル」が、「#include<stdio.h>」でしょう。大抵、「#include<studio.h>」とつづりを間違えます。「スタジオ」という英語を連想することも原因でしょうが、そもそもこの構文が何を意味するか知らないまま打ち込んでいることも要因です。
以下のメッセージをご覧ください
(22): error C2143: 構文エラー : ';' が ':' の前にありません。
これは、returnにセミコロンではなく、コロンを使っているからです。セミコロンとコロンは、よく似ていますし、キーボードの配置もすぐ隣で、間違えることがあります。
今回の自己採点シートを以下に示します。
問題 | 内容 | 配点(点) |
---|---|---|
線形探索プログラム | ソースコードとエラーメッセージを一通り読んだ | 40 |
エラーを見つけた | 件数×10 | |
その他のバグを見つけた | 件数×5 | |
リスト4 自己採点シート |
今回は、プログラミングの初心者である学生がよく間違えるコンパイルエラーを埋め込んだプログラムを出題しました。エラーの数が多かったと思いますが、全て分かったでしょうか。難易度の高低※5)はありますが、プロでもコンパイルエラーに頭を悩ますことがあります。今回の問題程度ならば、visual studioやeclipseのようなツールを使うと、エディタ上で指摘してくれます。使ってない方は、是非、活用してください。
※5)テレビや書籍、Webサイトに頻出する表現で、非常に気になるのが「難易度が高い」です。「難度が高い」は、正しい表現で意味が通じますが、「難易度が高い」では、「難度が高い」のか、「易度(こんな言葉はありませんが)が高い」のか不明です。「硬軟度が高い」と書いてあれば、「ダイヤモンドより硬い」のか「豆腐のように柔らかい」のか分からないのと同じですね。とはいえ、言葉は生き物なので、今後50年以上、「難易度が高い」を「非常に難しい」ことの意味で使われ続けると、広辞苑にも、「これは『難度が高い』の誤用から」とただし書き付きで載るはずです。「正しい日本語認定」され、「コンパイルエラー」にはならないでしょう。
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.