main.c:7:43: warning: implicit declaration of function ‘dcal’ [-Wimplicit-function-declaration]
fprintf(stdout,"dcal(%g,%g)=
%g\n",a,b,dcal(a,b));
^~~~
main.c:7:34: warning: format ‘%g’ expects argument of type ‘double’, but
argument 5 has type ‘int’ [-Wformat=]
fprintf(stdout,"dcal(%g,%g)=
%g\n",a,b,dcal(a,b));
~^ ~~~~~~~~~
%d
main.c:10:5: warning: implicit declaration of function ‘g_print’; did you mean ‘dprintf’? [-Wimplicit-function-declaration]
g_print();
^~~~~~~
dprintf
--------------------------------------------------------------------
func.c:6:5: warning: implicit declaration of function ‘fprintf’ [-Wimplicit-function-declaration]
fprintf(stdout,"func:gval=%d\n",gval);
^~~~~~~
func.c:6:5: warning: incompatible implicit declaration of built-in function ‘fprintf’
func.c:6:5: note: include ‘<stdio.h>’ or provide a declaration of ‘fprintf’
func.c:6:13: error: ‘stdout’ undeclared (first use in this function)
fprintf(stdout,"func:gval=%d\n",gval);
^~~~~~
func.c:6:13: note: each undeclared identifier is reported only once for each function it appears in
func.c:6:37: error: ‘gval’ undeclared (first use in this function); did you mean ‘dcal’?
fprintf(stdout,"func:gval=%d\n",gval);
^~~~
dcal
上記のような警告やエラーが出たのですがどのような意味か教えてください。
No.1ベストアンサー
- 回答日時:
全文、google翻訳にかけてみてください。
わりとまともな日本語になります。
○C言語では、「使う前に宣言」が大原則ですが、大昔のC言語ではそうではありませんでした。
その名残りで
・宣言されていない関数は 「引数任意、戻り値intの関数」として宣言されたと見做す
・宣言されていない変数は 「int型の変数」として宣言されたと見做す
という「暗黙の宣言(implicit declaration)」というルールがあります。
ただし、昨今の作り方としては非推奨だし、変数の方は(最近の規格では)暗黙の宣言はできずにエラーとなります。
warning: implicit declaration of function 〜 は「関数の暗黙の宣言をしている」という「警告」です。
正確にはエラーではありませんので、コンパイル自体は進みます。
error: ‘???’ undeclared というのは「???という変数が未定義」というエラーです。
○ printf や fprintf , scanf 等の一部の関数( 宣言が func(...) みたいになっているもの) は、本来、引数の型をチェックできません。
%〜 の数や対応する型を正しく指定するのは、プログラマの自己責任となります。
ですが、一部のコンパイラは、できる範囲でチェックして、対応が間違っているときに「警告」を出します。
> main.c:7:34: warning: format ‘%g’ expects argument of type ‘double’, but
> argument 5 has type ‘int’ [-Wformat=]
%g は 対応するdouble型の値を出力する書式です。
これに該当する箇所には、 dcal(a,b) があります。
この dcal が「暗黙の宣言」によって, int型の戻り値の関数となっています。
そのため、求められる(expects)型である double と、指定された int とで違います、という警告が出ています。
○ did you mean 〜
未定義の名前にたいして「もしかしたらこれの打ち間違いですか?」という提案をしているものです。
ですが、いずれも的はずれの指摘をしているようです。
https://oshiete.goo.ne.jp/qa/11400399.html
こちらでは、(func.hの使い方がよくないですが) ちゃんと事前の宣言がされていてエラーなくコンパイルできます。
変更の方法がよくなかったのではないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) cryptcatのビルド 4 2022/07/21 14:55
- C言語・C++・C# Cのオブジェクトファイルの逆アセンブル 5 2023/05/13 01:51
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- 英語 Results: Two implant failures, one from each subgr 1 2022/12/10 16:49
- 英語 英文の添削お願いします。【長文です。】 マッチングアプリで相手を言い負かしている時のやつです。 色々 1 2023/07/01 02:12
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- 英語 Osseointegration has been suggested to represent a 3 2022/06/10 08:22
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- 英語 できるだけ直訳で英語の翻訳をお願いします。(英語→日本語) 1 2022/10/15 20:59
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
C言語のポインターに関する警告
C言語・C++・C#
-
C言語初心者の質問失礼します。
C言語・C++・C#
-
至急です! マクロ定義で #define NUMBER 10とし 関数で max(double ma
C言語・C++・C#
-
-
4
char*を初期化したいのですが
C言語・C++・C#
-
5
C言語でヘッダファイルにグローバル変数を宣言する
C言語・C++・C#
-
6
エラーの意味は? Lvalue required
C言語・C++・C#
-
7
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
8
プロセスIDの取得方法
C言語・C++・C#
-
9
C言語での引数の省略方法
C言語・C++・C#
-
10
配列を含む構造体の初期値について
C言語・C++・C#
-
11
【gcc・cygwin】multiple definitionエラーの解決法
C言語・C++・C#
-
12
C言語 関数プロトタイプ宣言の引数に配列を入れたいのですが
C言語・C++・C#
-
13
c言語でのfscanfについて
C言語・C++・C#
-
14
switch文のエラーについて
C言語・C++・C#
-
15
下記のプログラムがコンパイラでエラーになります。
C言語・C++・C#
-
16
teratrermを使ったデータの送信について
Windows 10
-
17
python エラー
その他(プログラミング・Web制作)
-
18
エラー: ‘inval’ の記憶サイズが不明です。 union semun inival; というエ
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
C言語の<ctype.h>のisspace()に...
-
構造体の要素すべてに対する四...
-
C++のfor文について
-
[C++]メンバ関数の仮引数について
-
visualstudio C# テキストボッ...
-
C++の(左辺値)参照を参照渡し
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
コンパイルすると error C1083 ...
-
ハンドルされていない例外が発...
-
値を返り値に返すのと参照渡し...
-
識別子が定義されていませんと...
-
2重定義って??
-
void func( void )について
-
【#define】 defineで定義した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
C++の(左辺値)参照を参照渡し
-
構造体の宣言でエラーが出ます。
-
main()とint main(void)の違い
-
intとINTの違いは?
-
エラー「invalid conversion fr...
おすすめ情報