何をf
数字が示した後?これはCまたはObjective-Cのどちらですか?これを定数に追加しないことで違いはありますか?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
なぜ私が書けないのか説明してもらえますか?
CGRect frame = CGRectMake(0, 0, 320, 50);
何をf
数字が示した後?これはCまたはObjective-Cのどちらですか?これを定数に追加しないことで違いはありますか?
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
なぜ私が書けないのか説明してもらえますか?
CGRect frame = CGRectMake(0, 0, 320, 50);
回答:
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
浮動小数点定数を使用します。(定数0.0は、通常、Objective-Cでdoubleを宣言します。最後にfを置く-0.0f-定数を(32ビット)floatとして宣言します。)
CGRect frame = CGRectMake(0, 0, 320, 50);
floatに自動的に変換されるintを使用します。
この場合、2つの間に(実用的な)違いはありません。
疑問がある場合は、アセンブラの出力を確認してください。たとえば、このような小さな、最小限のスニペットを書きます
#import <Cocoa/Cocoa.h>
void test() {
CGRect r = CGRectMake(0.0f, 0.0f, 320.0f, 50.0f);
NSLog(@"%f", r.size.width);
}
次に、-S
オプションでアセンブラーにコンパイルします。
gcc -S test.m
アセンブラーの出力をtest.s
ファイルに保存.0f
し、定数から削除して、コンパイルコマンドを繰り返します。次にdiff
、新しいものtest.s
と以前のものを実行します。本当の違いがあるかどうかがわかるはずだと思います。あまりにも多くの人が、コンパイラーが何をしているのかというビジョンを持っていると思いますが、結局のところ、理論を検証する方法を知っておく必要があります。
-O
。私はi686-apple-darwin10-gcc-4.2.1(GCC)を使用しています
時々違いがあります。
float f = 0.3; /* OK, throw away bits to convert 0.3 from double to float */
assert ( f == 0.3 ); /* not OK, f is converted from float to double
and the value of 0.3 depends on how many bits you use to represent it. */
assert ( f == 0.3f ); /* OK, comparing two floats, although == is finicky. */
これは、これが浮動小数点数であることをコンピューターに伝えます(ここではc / c ++について話していると思います)。数値の後にfがない場合、それはdoubleまたは整数と見なされます(10進数があるかどうかによって異なります)。
3.0f -> float
3.0 -> double
3 -> integer