投稿されたコードで何をしていてもdouble
、関数内でデータ型をまったく使用していません。また、関数の戻り値の型から、戻り値が 127 を超えることはないようです。
このコードはいくつかの問題を強調しています:(これは単なる説明です)
char hexRepresentation(double n){
if(n > 9){//comparing (double>int). Bad.
if(n==10) return 'A';
if(n==11) return 'B';
if(n==12) return 'C';//You wrote if(double == int). Bad.
if(n==13) return 'D';
if(n==14) return 'E';
if(n==15) return 'F';
}
return (char)n; //again unsafe downgrade from 8 bytes double to 1 byte char.
}
コンパイラ エラーを修正したとしても、関数内でのデータ型の危険な使用により、常に目的の結果が得られるとは限りません。
なぜ悪いのかを知るには、ここを見てください:
http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm
その関数本体fabs(n)
のどこでも代わりに使用します。n
hexRepresentation
また、この関数定義の前に同じ名前の関数の以前の宣言または定義が存在する場合、「'hexRepresentation' の型が競合しています」というエラーが表示されます。また、関数を宣言せず、呼び出された後にのみ表示される場合はint
、コンパイラによって自動的に想定されます。
そのため、main() の前に関数を宣言して定義するか、main() の前に宣言して、ファイル内の他の場所で関数を定義しますが、同じ関数プロトタイプを使用します。
行う:
char hexRepresentation(double); //Declaration before main
main()
{
...
}
char hexRepresentation(double n){//Definition after main
...
}
または
char hexRepresentation(double n){ //Declaration and definition before main
...
}
main()
{
...
}