アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語のサフィックスについてなのですが、これは要するに定数の型(?)を明示するものでしょうか?またどんな時に使うのか、使わなくてはならないのかを教えてください。検索はしたのですが詳しい説明が見つからず、質問させていただきました。回答よろしくお願いします。

A 回答 (2件)

C言語規格書(JISX3010)の



6.4.4.1 整数定数
6.4.4.2 浮動小数点定数

に記述があります。

わかりやすいサイトも参考にリンクを載せます。
http://www9.plala.or.jp/sgwr-t/c/sec13.html
の「13-4.定数の修飾」


接尾辞を指定しない場合、整数定数の10進定数の場合
・int
・long int
・long long int
の順で、解釈されます。
単に 10 と記述すれば int の範囲内であるため int型の定数になります。
intの範囲外の値である場合、long intの範囲内であればlong int型の定数に、
long intの範囲外であれば、long long intの範囲内であればlong long int型で扱われます。
long long intの範囲外であればエラーがでるのかな。

ここで、たとえば

long int i = 0;

と記述すると、int型定数からlong int型に代入するため内部的にキャストが行われるんではないでしょうか?
だったら最初から

long int i = 0L;

としておいた方が効率がよさそうです。
また、関数の引数でlong intを欲しているときも同様です。
void hoge(long int i);

hoge(10); よりも hoge(10L);

(C++になると型に五月蠅くなるので、接尾辞をつけないとエラーになるケースもある。)
    • good
    • 1
この回答へのお礼

なるほど!あらかじめ代入される変数と代入する定数の型を合わせておけば処理が早くなるんですね。
サフィックスの有り無しで代入の速度がどう変わるか実験してみたのですが(unsigned longの変数に10と10ULを代入した際の速度の差)、結果はどちらも変わりませんでした。最近のコンパイラは最適化がんばってくれてるんですね。ということは、最近のコンパイラではサフィックスの意味はあまりないかも・・・?
意味がわかってすっきりしました。回答ありがとうございました!

お礼日時:2009/07/31 11:02

プレフィクスではなくて?



・サフィックス=接尾辞
・プレフィクス=接頭辞


たとえばどんなものでしょうか?

この回答への補足

100Uや100L、100.5FにつくU,L,Fのことです。

補足日時:2009/07/31 09:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A