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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

3回答

340閲覧

仮引数で型を決めていることの意味

slimat

総合スコア57

C

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

1グッド

0クリップ

投稿2018/11/28 05:23

こんにちは。

c言語にて、仮引数部分で型を宣言している関数を見かけたのですが、どのようなことが起こるのですか?
関数外から受け取った実引数を強制的にその型に変換したりする作用があるのでしょうか?
次のコードのようなものです。

c

1void func(double a) { 2 return ; 3}
yohhoy👍を押しています

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

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

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

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

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

ozwk

2018/11/28 05:26

むしろ仮引数に型が書いてないほうがおかしいんですが
slimat

2018/11/28 05:35

そうなんですか!知識が浅いので知りませんでした。質問のコードの場合だと、関数外でint型で実引数を送った場合double型に変換されて、関数内で処理が進むのですか?
guest

回答3

0

ベストアンサー

型変換できる場合は変換します。
できない場合はコンパイルエラーにしてくれます
変換できる場合でも、環境によっては警告を出してくれます。

投稿2018/11/28 05:39

ozwk

総合スコア13528

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

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

slimat

2018/11/28 05:45 編集

回答ありがとうございます! おかげさまで理解できました。
slimat

2018/11/28 06:22 編集

すみません!いまさらなんですが、逆に仮引数で型を宣言していない場合だと、どうようになるのか疑問が生じました。 質問のコードだと、関数外からdouble型の実引数が来た時、aにはそのdouble型の実引数が入るのでしょうか?
otn

2018/11/28 12:50

型を書いてないと、intが仮定されると思います。つまり、foo(x) は、foo(int x) と同じです。
slimat

2018/11/28 13:01 編集

なるほど!そのようになるのですね。 回答ありがとうございました。
guest

0

ちなみに、規格化されたC89以前のCでは
関数宣言部の仮引数に型は書けなかったらしいです。

c

1void func(param); 2 3void func(param) 4double param; 5{ 6 return; 7}

ANSIによる標準化によって

c

1void func(double param); 2 3void func(double param) 4{ 5 return; 6}

と書けるようになりました。

投稿2018/11/28 06:24

asm

総合スコア15147

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

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

slimat

2018/11/28 06:26

コメントありがとうございます! おかげさまで知識が増えました。
otn

2018/11/28 12:57

当時はvoidも無かったですね。返り値を使わない場合でもint型でした。 また、関数の宣言だけする場合は、仮引数を書く意味が無いので、括弧内は空でした。 返り値の型がint型の関数は、宣言だけする意味が無いので、宣言は書かないのが普通。
guest

0

その型の変数しか受け付けない、と考えましょう

違う型の変数を入れてその関数を呼ぼうとするとコンパイルエラーになったりします

#整数型どおしならある程度変換してくれますが

投稿2018/11/28 05:39

y_waiwai

総合スコア87774

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

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

slimat

2018/11/28 05:45 編集

回答ありがとうございます! おかげさまで理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問