2011-07-14 16 views
1

このプログラムの7行目は "pay = prt(pay);"ではありません。 doubleを必要とするparamにintを渡すので、コンパイルエラーまたは実行時エラーがスローされるはずです。私はdev-C++でうまくコンパイルし、両方の出力行でプログラムを実行しました。説明してください、ありがとう。異なるデータ型の関数呼び出し

#include <stdio.h> 
int prt(double b); 
main() 
{ 
    int pay = 3; 
    double tax = 2.2; 
    pay = prt(pay); 
    prt(tax); 
}  

int prt(double b) 
{ 
    b *= 2; 
    printf("%.2lf\n", b); 
} 
+0

トップの答えはhttp://stackoverflow.com/questions/175689/can-you-use-keyword-explicit-to-prevent-automatic-conversion-of-method-parametersでタイプの厳密さを強化する興味深い方法を提供しますここではテンプレートとプライベートアクセスに傾きます... – fearlesstost

+0

Ugh、[dev-C++](http://stackoverflow.com/tags/dev-c%2b%2b/info)。 –

+0

downvoteを理解していません。質問は理解しやすく、話題にもなります。 OPがあまり教育を受けていないためにダウンボートが発生しましたか?そのような場合は、すべての質問をd​​ownvoteする必要があります。 –

答えて

6

この状況では、Cは自動的に異なる数値型間で変換します。

Implicit type conversion in C-like languagesを参照してください。

+2

C++とjavaについてはどうですか? – wadafarfar

+0

@wadafarfar:あなたは真剣ですか?この質問はJavaにタグ付けされていません。たとえそうであったとしても、これはあまり設計されておらず、言葉に乏しい疑問を補うものではありません。 –

3

関数をintと宣言しましたが、何も返されず、mainのいずれかの戻り値も返されませんでした。私はすべてのコンパイラがあなたのコードを拒否する権利があると思います。

+1

最初は技術的に許可されていますが、値を使用しようとするとUBが返されますが、返された値は返されます。 2番目は診断が必要です.C++では古いCの暗黙のintルールを使用できません。 –

+1

C++では、値を使用しなくてもUBを取得します。最後の流れはC++のUBです。 –

-1

より小さいまたは等しいサイズのデータ​​型は、より高い値に変換できます。

逆の場合: Float to intは切り捨て、つまり小数部の削除を引き起こします。 double to floatは、 のlong intをintに丸めると、超過した上位ビットが削除されます。

関連する問題