• ベストアンサー

エラーの意味が…

自分でプログラムを打ち、コンパイルしてみたんですけど 「c:10:警告:incompatible implicit declaration of built-in function 'printf'」とエラーが出てきました。 自分なりに10行目[ printf("%d :",b[i]); ]をいじってみたりは したのですが、上手くいきません。 いったいドコがおかしいのでしょうか? ご指導よろしくお願いします<(_ _)> ↓コレがそのプログラムです。 *************** int main(void){ int score[3][4]; int i,j,sum[3]={0}; score[0][0]=70; score[0][1]=80; score[0][2]=75; score[0][3]=60; score[1][0]=75; score[1][1]=83; score[1][2]=70; score[1][3]=70; score[2][0]=60; score[2][1]=76; score[2][2]=70; score[2][3]=55; char b[]="ABC"; for(i=0; i<3; i++){ printf("%d :",b[i]); for(j=0; j<4; j++){ printf("%3d",score[i][j]); sum[i]+=score[i][j];} printf(" : sum=%d, ave=%5.2f\n",sum[i],(float)sum[i]/4); } return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
  • 04kuu11
  • ベストアンサー率16% (1/6)
回答No.1

printf("%d :",b[i]); %dは整数を表示するときに用いるものです。 この場合は文字を出力したいのですから、%cとすべきでしょう。 この%d、%c、%fなどは、書式制御文字列と呼ばれ、変数の中身をどのような形式で表示するかをコントロールするものです。 「書式制御文字列」で検索すれば、詳しい使い方が見つかると思いますよ。

Berabow
質問者

お礼

早速お返事ありがとうざいました<(_ _)> 確かにココはおかしいですよね、自分でもアホだなぁと思い早速 直してみたんですが、エラーが消えません。 何か他に問題があるのかな…? また少し考えて見ます。

その他の回答 (3)

  • ponnta
  • ベストアンサー率17% (31/179)
回答No.4

C言語で関数を使うときには、同じファイルで、 関数をコールしている箇所より前(上)に関数の本体か、 関数のプロトタイプなければいけません。 同じファイルでも呼び出すところよりしたに関数がある場合は、 呼び出し箇所しょり前にプロタイプが必要です。 さて、エラーの意味ですが、関数printfの実体も、プロトタイプもないに いきなり使われいます。コンパイラはどこかにあるものとして処理を しました。という「警告 (worning)」です。 通常、他のファイル呼ばれる関数のプロトタイプは、ヘッダファイル (.h)に聞きます。 別のファイルにある関数を呼び出す側では、そのヘッダファイルを インクルードします(#inckude) 関数 printf() は stdio.h に記述されいるので、 No3.の方のように書くと、警告表示が消えます。

Berabow
質問者

お礼

なるほど、教科書を読んでるみたいに 良くわかりました<(_ _)>

  • YoxoY
  • ベストアンサー率42% (43/101)
回答No.3

2の方が、答えをそのまま書いていらっしゃいます。 下記の様に変更して下さい。 ↓コレがそのプログラムです。 *************** #include <stdio.h> int main(void){ (以下、省略)

参考URL:
http://www.cmagazine.jp/src/kinjite/c/oldstyle.html#index6
Berabow
質問者

お礼

お礼が遅れてすみませんでした<(_ _)> なんとか問題も解決し、正常に動きました。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 「c:10:警告:incompatible implicit declaration of built-in function 'printf'」とエラーが出てきました。 この警告はgccですね。 直接の原因は<stdio.h>がインクルードされていないところにあります。 printfのような可変個引数を伴う関数を関数原型なしで呼び出した場合の動作は未定義です。 他には、既に回答が出ているように、書式指定と実引数が矛盾している問題があります。

Berabow
質問者

お礼

はぃ、gccつかってやってます。 まだC言語を始めたばかり(しかも独学)なので 少し説明を理解するのに時間がかかりましたが なんとなく意味はつかめました。 しかし、どうすればそれが改善するのか…。 No.1さんの指摘は明らかに私の間違いでしたが エラーとは関係がなかったみたいです。 何がおかしいのかもう少し、考えて見ます。

関連するQ&A