Cの基本:いま、使っている型を意識しよう:目指せ! Cプログラマ(3)(2/3 ページ)
プログラミング言語の基本となる「C」。正しい文法や作法を身に付けよう。Cには確かに学ぶだけの価値がある(編集部)
変数の宣言
すでに説明しましたが、変数を利用するためには、その前に宣言をしなければなりません。
変数の宣言は、「型指定子 識別子」という形になります。Sample1.cの変数sumの宣言では、intが型指定子、sumが識別子に当たります。
型指定子には、これから宣言する変数の型を書きます。識別子とは名前のことで、その変数を利用するときには宣言した名前を使います。Sample1.cでは、変数sumを7行目と8行目で使っています。
6 int sum; 7 sum = 30 + 40 + 50 + 60 + 70; 8 printf("sum : %d\n", sum);
「利用する前には宣言が必要」というルールは、型と密接な関係があります。Cにおいては、オブジェクトの型は宣言と同時に決まります。また、宣言されたオブジェクトの型を変更することはできません。
このようにCでは、オブジェクトと型がしっかりと対応付けられているため、開発者がそのオブジェクトをどのように扱いたいのかをはっきりとCコンパイラに伝えられます。もしも、プログラマが間違った使い方をすると、Cコンパイラはそれを見つけてエラーとして教えます。
なぜそれが良いことなのかは、Cを利用していくうちに理解できるようになるでしょう。いずれにせよ、型を理解することはCを知る上でとても大切なことなのです。
さて、Sample1.cに戻りましょう。7行目では、計算結果の値を変数sumに格納しています。6行目と7行目は、次のようにまとめて書くこともできます。
int sum = 30 + 40 + 50 + 60 + 70;
つまり、変数の宣言と同時に変数の最初の値(初期値)を設定することができます。
識別子の命名規則
ところで、識別子はプログラマが考えた名前を付けられますが、いくつかの規則があります。
- _(アンダーバー)、あるいはアルファベットの大文字小文字から始めます
- 2文字目以降は、_、アルファベットの大文字小文字、数字が続きます
- あらかじめ定義された識別子は、自分で宣言する識別子としては使えません
1つ目の規則により、数字から始まる識別子を付けられません。2つ目の規則により、2文字目以降には数字を使用できます。「abc123」や「_123abc」という識別子は付けられますが、「123abc」は識別子として使えません。
また、_に続いてアルファベット大文字で始まる名前と、__(2つのアンダーバー)で始まる名前は、コンパイラやライブラリなどで使われていることがありますので避けた方が良いでしょう。
Cで規定されている識別子の制限はこれだけですが、これとは別に開発の現場では、よく使われている名前付けルールというものがあります。1人でプログラムを開発している場合にはどのような名前を付けてもかまいませんが、ほかの人と一緒に同じプログラムを開発するときには、名前付けルールを決めておくと気分良く開発を進められるでしょう。ほかの人が書いたプログラムを変更するときには、その名前付けルールに従うのが良い習慣です。
型の大きさ
整数を入れられる整数型には、int型をはじめ、いくつもの型が用意されています。これらの整数型は大きさがそれぞれ違いますので、入れられる値の大きさが異なります。それぞれの型には上限と下限の値があり、その範囲の中の値しか扱えません。範囲の中にある値であることを、表現できる(表現可能)といいます。
どの型がどれだけの大きさを持っているか、つまりどの範囲の値を表現できるかは、コンパイラ製品や、コンパイラのバージョン、コンパイル時のオプションなどによってによって異なります。
最終的には、使っているCコンパイラの仕様を確認することになりますが、ここではCで定められている範囲と、GCC 3.4.5とVisual C++ 2008の表現可能な範囲を調べてみました。なお、Cで定められているのは絶対値の最小値で、実際のコンパイラでは必ずこれと同じか、より広い範囲になります。
型 | Cでの規定 | GCC 3.4.5(*3)と Visual C++ 2008 |
|
---|---|---|---|
signed char | -127 〜 127 | -128 〜 127 | |
unsigned char | 〜 255 | 〜 255 | |
short int | -32767 〜 +32767 | -32768 〜 32767 | |
unsigned short int | 〜 65535 | 〜 65535 | |
int | -32767 〜 +32767 | -2147483648 〜 2147483647 | |
unsigned int | 〜 65535 | 〜 4294967295 | |
long int | -2147483647 〜 2147483647 | -2147483648 〜 2147483647 | |
unsigned long int | 〜 4294967295 | 〜 4294967295 | |
long long int | -9223372036854775807 〜 9223372036854775807 |
-9223372036854775808 〜 9223372036854775807 |
|
unsigned long long int | 〜 18446744073709551615 | 〜 18446744073709551615 |
【*3】 Pleiades 3.5に同梱されているMinGWに含まれているGCCが3.4.5です。このケースはMinGW版のGCCの場合で、オプションは特に変更せずコンパイルした場合です
Cでの規定と、GCC 3.4.5やVisual C++ 2008ではさほど大きな違いはありません。しかし、64ビット環境向けのプログラムでは、範囲が大きく変わっています。どの範囲がどのように変わっているかはコンパイラによって異なっていますので、正確にはこちらも仕様を確認する必要があります。ただ、32ビットと比べて範囲が狭くなっていることはありませんので、普通は問題にならないでしょう。
なお、long long intとunsigned long long intはC99で新しく登場した型です。そのため、サポートしていないコンパイラがありますので、使いたい場合にはコンパイラの仕様を確認してください。
ひとくちに整数といっても、さまざまな型があり、それぞれ表現できる範囲が異なります。これは、その型を使用したときに割り当てられる領域の大きさが異なるからです。
この領域はメモリにとられますから、節約好きの皆さんは、必要ないほど大きな領域を使わない方がいいと予想が付くのではないでしょうか。だからといって、型が扱える範囲を超えた値を入れることはできませんので、入れる値の範囲に見合った型を使うのが良い作法です。
とはいえ、この表の範囲を覚えるのは大変です。初心者のうちは、あまり細かく考えずに、次のように使うと良いでしょう。
- 普段はint型を使います
- int型で収まらないほど大きな値を扱いたいときは、int型よりも大きな型を使います
- メモリの効率がどうしても気になるようであれば、int型よりも小さな型を使います
Copyright © ITmedia, Inc. All Rights Reserved.