定数

ここでいう定数は、名前のついた定数、例えば Ruby の FOO とかのことじゃなくて、いわゆるリテラルのこと。

  • 整数の定数は小数点と小数部がない数値。例:10、-100
  • 浮動小数点数の定数は、小数点と小数部がついた数値。例:10.0、-2.5
  • 浮動小数点数の定数は、指数表記もできる。例:1.25E+03
  • 文字定数は、引用符(’ ‘)で囲む。例:’a’
  • 文字列定数は、二重引用符(” “)で囲む。例:”hogehoge”

ここでちょっと注意点。C には文字列というデータ型はない。文字列は文字の配列として扱われている。これはまた後で出てくるはず。

コンパイラが数値の定数を解釈するとき、デフォルトでは互換性のあるデータ型のうちその数値がおさまる最小の型だと解釈する。ただし、浮動小数点数は double と解釈する。これを変えたいときは次のような接尾辞をつける。

  • 浮動小数点数:F をつけると float、L をつけると long double
  • 整数:U をつけると unsigned、L をつけると long int

数値を変数に代入するときには、その変数の型に解釈してくれるのであまり気にすることはないけど、関数の引数として直接使うときには注意が必要。次のプログラムは、「42340」ではなく「-23196」と出力してしまう。

#include

int main(void)
{
    printf("%hd\n", 42340);

    return 0;
}
takatoh@nightschool $ ./sample_4_3
-23196

これは、%hd という指定子から引数の数値が short int だと解釈してしまうから。正しく出力するには、%hu 指定子(符号なし short int)を使う必要がある。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください