質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.54%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

680閲覧

C言語の出力に関する質問

yohu_gakusei

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/08/05 12:47

出力に関するエラー

double型を出力したいのですがエラーになってしまいます。

実現したいこと

  • 小数の数値を出力したい

発生している問題・エラーメッセージ

main.c:16:15: warning: format ‘%lf’ expects argument of type ‘double’, but argument 2 has type ‘double (*)()’ [-Wformat=] 16 | printf("%lf",test); | ~~^ ~~~~ | | | | | double (*)() | double 0.000000

該当のソースコード

C

1#include <stdio.h> 2 3double test(){ 4 return (6*12)/13; 5} 6int main() 7{ 8 printf("%lf",test); 9 return 0; 10} 11

解決したいこと

  • なぜエラーになってしまうのでしょうか?
  • またdouble (*)()とはどういった意味なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohu_gakusei

2022/08/06 04:34

完全に忘れていました、その通りでした。
guest

回答4

5

なぜエラーになってしまうのでしょうか?

printfのフォーマットとして%lf、つまりdoubleの表示をしようとしているのに
test、つまりdoubleの戻り値を返す関数へのポインタ、が渡された為エラーになります。

またdouble (*)()とはどういった意味なのでしょうか?

double型の戻り値を持つ関数へのポインタ、という意味です。
test()ならtestが実行され、doubleの値が返ってきますがtest、だと関数testそのものへのポインタになります。

投稿2022/08/05 13:10

drednote

総合スコア336

holly, KoichiSugiyama, archiver, HidekoSaeki, BeatStar👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1#include <stdio.h> 2 3double test(){ 4 return (6*12)/13; 5} 6int main() 7{ 8 printf("%lf",test()); //関数なので引数がなくても()を付ける 9 return 0; 10}

投稿2022/08/13 00:19

777shuang

総合スコア98

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

もしかして他の言語とごっちゃにしていませんか?
他のとある言語だと引数無しの場合は”()”を省略できますが、C言語ではそんなことはできません。

double test(void)ならdouble n = test();という感じで呼び出します。
double n = test;とは呼び出せません。
このように呼び出そうとすると「変数」の方にアクセスしようとします。

そしてC言語では関数もポインタのようです。
「関数ポインタ」と呼ばれるもので、関数もデータと同じくどこかに配置されています。その場所にアクセスしてその場所にある処理等を行うのです。

なのでエラーメッセージではそのような表記になっているのだと思いますよ。

C言語では引数が無くとも呼び出し時は必ず”()”をつけて呼び出しましょう。

投稿2022/08/06 03:47

BeatStar

総合スコア4956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

printf("%lf",test);

test はdoubleの変数じゃありません。

またdouble (*)()とはどういった意味なのでしょうか?

doubleを返す関数のポインタです

投稿2022/08/05 13:04

編集2022/08/05 13:06
y_waiwai

総合スコア87682

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.54%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。