- ベストアンサー
何故か解決致しました。
何故か解決致しました。 いつも、解決する時は、エラー箇所を 全く同様に打ち直したらコンパイルできるのです。 本当に不思議です。 こんな経験はないですか? 原因はなんでしょうか? もし推測できる方がいらっしゃったらアドバイスをください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
厳しい意見が多いようですが、全部にちゃんとお礼言ってるあたりは、関心します。 私見ですが、プログラムを開発する作業において、コンパイラやリンカの出力するエラーの再現性が悪く、コンパイルする度に結果が異なるということは、非常にまれなケースだと思います。つまり、同じソースをコンパイルすると同じエラー結果が得られるということです。他の回答者さんは、みな同様な意見のように思えます。大抵の場合、不思議な事は無く、結果としてしごく当然で、ほとんどの場合、自分が悪いですね・・・。 とはいえ、僕も子供の頃に、雑誌(ベーマガとか)に載ってるソースコードを手入力し、わけのわからないエラーが消せず、丸々打ち直したというような経験があります。ちょうど、offikouさんの様な感じですね。でも、まぁ・・・この辺は経験をつめば理解できますので。みなさんの言うように、エラーメッセージを訳して、コンパイラのヤツは何を言ってんだ?ってあたりをつぶしていくといいでしょう。 非常に稀とはいいましたが、グループでプログラムを組んでいる際、ある人の編集が原因で自分のファイルがコンパイルできなくなったり、といったことは多々あります。1時間前はコンパイルできたのに・・・という感じ。でも、そういう仕事をする頃には、エラーメッセージも、サクサク理解できるようになってます。offikouさんのケースでは無いですが、こういうこともあるっていう蛇足でした。
その他の回答 (7)
- taishokunn
- ベストアンサー率14% (41/275)
おそらく、リターンを押す位置が変わったりスペース等が半角全角の切り替えができていたり、 漢字のコードと符合類のコードとかのぶつかり合いとかが私の時代にはありました。いつもエラーの出る箇所のソースプログラムの説明箇所を削除したら治ったこともありました。(たまたまかも)。
お礼
ご回答ありがとうございました。 今回は、分かりやすい入力ミスに気付きませんでした。 以前お世話になった会社でBORLAND社のDBASEを教わって、大変業務が効率化されました。 しかし、LinuxやC言語はまた別物です。 一歩一歩、理解して慣れていければと思います。 まだ始めたばかりなので、自分の経験でリズムを掴めるようがんばります。 多くのアドバイスありがとうございました。
- kmee
- ベストアンサー率55% (1857/3366)
いいですか。 前回のプログラムは 18行目: for(i = 0; < KAMOKU;i++) 27行目: for(i = 0; < KAMOKU;i++) が明らかな間違いで、 for.c:18: error: expected expression before ‘<’ token for.c:27: error: expected expression before ‘<’ token とコンパイラも18行目と27行目がエラーだと言っているのです。 この意味も調べずに、ただ入力しなおしたら動いた、というのは、プログラムの勉強ではなく、キーボード操作の練習にしかなってないんです。 しかも、原因を「全角で入力」などと的はずれなこと言っているようでは、また同じ間違いを犯す、ということです。 まずは、エラーメッセージはちゃんと読んでください。英語がわからなかったら、辞書で調べてください。最近はネットで翻訳もできます。比喩等といった文学的表現は使われていないので、小説を原語で読むのに比べれば非常に簡単です。 C言語では、言語の性質上、エラーメッセージの出る箇所と実際の間違いが一致しないこともあります。(括弧の対応間違いとか) しかし、今回は「before '<' ( '<'の前 )」と、エラーメッセージのでた箇所と、間違いの箇所が一致している、とても修正しやすいものです。 > こんな経験はないですか? > 原因はなんでしょうか? 人間は間違います。 同じに入力したつもりでも、キーを2回叩いてしまったり、となりを押してしまったり、順番がいれかわったり.... そして、人間の脳は、目や耳から入った情報に、無意識のうちにフィルタをかけてしまいます。今のあなたのように、「全く同様に打ち直した」と思って見ると、違いを見落しやすくなります。 そこで、機械の力を借りるのです。 エラーメッセージは、間違いを指摘してくれます。 diffツールは、人間が見落すようなファイルの差分を確実に探してくれます。 デバッガを使ったり、経過を表示させたりして、計算やアルゴリズムに間違いが無いかチェックします。 ソフトウェアテストで仕様通りに動作しているか確認します 熟練プログラマでさえ、そうやってチェックしなければ正しいプログラムを作れません。 ましてや、まだ10日の初心者なら、間違いが絶対ある、というつもりでいないと。 エラーメッセージの内容や、間違いのあるプログラムと正しいプログラムとの違いから、自分がどこを間違えたのかを確認して、自分がどこが理解できてないのかを知る、というのは、プログラム言語の学習にとても有用です。
お礼
分かりました。 少しずつでも上達する様に、地道にやっていきます。 ありがとうございました。
- harawo
- ベストアンサー率58% (3742/6450)
> 今回は見落としていたのかも知れません。 あのね、前回のあなたの質問の中の、プログラムコードで、何が間違っているかは、あなたに回答した人たち、すべてわかっているんですよ。「かも知れません」ではなくて、まちがいなくあなたは間違っているんです。 ではなぜ「ここが間違っている」という指摘を、だれもしなかったかというと、あなた自身が自力で見つけ出さないと、あなたのためにならなかいからです。
お礼
おっしゃる通りでした。 打ち直して正常にコンパイラできた時は、 多分、全角が混ざっていたのではないかと思います。 今後気をつけます。
- D-Matsu
- ベストアンサー率45% (1080/2394)
「自分を徹底的に疑え」「エラーメッセージは良く読んで意味を考えろ」だけでなく「わからないものはまず調べてみる」ってのも必要ですよ。 文脈から多少は判断できると思いますが、二つ(以上)のファイルの差分を取るdiffというツール及びその派生ツールがあります。 「コンパイルが通らないコード」を保管しておいて、「打ち直してコンパイルが通るようになったコード」とセットでこのツールにかけるとなんらかの差分が必ず出るでしょう。 WindowsならDFとかWinMerge辺りが定番です。
お礼
ご指導ありがとうございます。 ただ、diff辺りから以降の文章はまだ理解できません。 初めて10日間ほどしか経っていないのです。 後で調べてみます。
- D-Matsu
- ベストアンサー率45% (1080/2394)
「全く同様に打ち直した」と本人は思っていても実情は違う、という事です。 コンパイルエラーの出るコードと出ないコードをdiffで比較してみれば一目瞭然でしょう。 というか、エラーメッセージを見ない=エラー原因を全く考えずにただ本の通りに打ち直していては全く上達しませんよ?
お礼
ありがとうございます。 上達する様に心を改めます。 あと、diffで比較する、とはどうする事なのでしょうか?
- php504
- ベストアンサー率42% (926/2160)
前の質問では明らかに i を書き忘れていますが単純な見落としではないでしょうか
お礼
ご指摘ありがとうございます。 でも、目を皿の様にして見ても、間違っていないのに、今まで何度も同じ言語を書き直したらコンパイラできたというケースが多いのです。 今回は見落としていたのかも知れません。
全角文字が紛れ込んでいたとかでしょうか?全角スペースあたりがくさいですが、コンパイルエラーで発見しやすいですよね。 コンパイルエラーなしなのに動作が変というのでデバッグトレースしたらcase文内の、default: のスペルミスでラベル扱いされてデフォルトケース処理が実行されていないことがありました。 ご参考までに。
お礼
ありがとうございます。 実はまだ始めたばかりで、お書きになっている意味がよく分かっていないのです。
お礼
ご回答ありがとうございます。 普段は違う行にエラーを指摘する事が多いと思うのですが、今回は誤りの行をまさに指摘しているのにも関わらず、気付きませんでした。 言い訳ですが、今回は一番悪い見落とし方だと思います。 私は文系の出身であまりコンピュータの仕事の経験がなく、書籍にとっつきにくいのですが、いつもエラーメッセージを検索したり、本を遡ったり、違う書籍を見たり、自分ではその時は限界まで考えたつもりで、人に頼っています。 それでもやはり自分の努力が足りませんでした。 暫く、自学してから投稿致します。 その際は、どうぞ宜しくお願い致します。