
プログラムでデータを取り扱うには、データを格納するための場所が不可欠です。データには数値や文字などの様々な姿があり、それぞれに対応した形式で準備する必要があります。
計算の文とは
計算の文とは、変数や値を用いた様々な計算処理をコンピュータに指示するための文です。ここでいう計算処理は、いわゆる四則演算(加減乗除)だけではありません。変数に値を代入することも、真・偽を判定する論理演算も、コンピュータにとっては計算処理の一種です。
#include <stdio.h>
int main(void)
{
int a; ▶︎ 変数宣言の分
int b;
a = 50; ▶︎ 計算の文(代入)
b = a + 10; ▶︎ 計算の文(足し算して代入)
printf("%d¥n", a);
printf("%d¥n", b);
return 0;
}
計算の文「b = a + 10」のような部分を式といいます。
多くのプログラミング言語では、+と=を演算子(operator)、そしてa、b、10の部分をオペランド(operand)といいます。演算子は式にあるオペランドを使って計算します。複雑な式であっても同様で、全ての式はオペランドと演算子のたった2種類の要素だけで構成されています。
リテラル
これまで、数値の10や50ソースコードに直接記述されている値のことをリテラル(literal)といいます。
リテラルはその値に応じたデータ型を持っており、それぞれのリテラルがどの型の情報を表すのかは、リテラルの表記方法で決まります。
リテラルの種類 | 表記例 | 型 |
---|---|---|
何も付かない整数 | 50 | int型 |
末尾にLまたはlが付いた整数 | 500000L | long型 |
末尾にFまたはfが付いた小数 | 50.5F | float型 |
何も付かない小数 | 3.1415 | double型 |
trueまたはfalse | true | bool型 |
引用符で囲まれた文字 | ‘A’ | char型 |
二重引用符で囲まれた文字 | “Hello” | String型* |
*厳密には異なるが、ここではString型としています。
‘A’と”A”は同じに見えますが、引用符が違うため別のデータとして見なされます。
‘A’はchar型の文字「A」、”A”はString型の文字列「A」です。
整数リテラルに関する応用記法として、10進数以外の数を表す方法も用意されています。整数リテラルの先頭に0xまたは0Xを付けると16進数、0を付けると8進数として解釈されます。
int a = 0x11; ▶︎ aには17が代入される

エスケープシーケンス
String型のリテラルを記述する際にしばしば用いられるのが、エスケープシーケンス(escape sequence)と呼ばれる特殊な記号です。これは、¥記号とそれに続く数文字からなる表記で、それぞれ特殊な文字を意味します。
表記 | 意味 |
---|---|
¥n | 改行を表す制御文字 |
¥r | 復帰を表す制御文字 |
¥xhh | 16進数hhの文字コードを持つ文字 |
¥” | 二重引用符記号(”) |
¥’ | 引用符記号(’) |
¥¥ | 円記号(¥) |
これまで、printf()命令で用いていたのが¥nです。この2文字で、「この場所で改行することを意味する特殊な1文字」の役割を果たします。
printf("こんにちは¥nぷーたろーです。¥n勉強中です。¥n");
こんにちは
ぷーたろーです。
勉強中です。
エスケープシーケンスを用いていない例
例えば、「私の好きな記号は”です」という文字列を画面に表示する処理を考えてみましょう。次のようなプログラムを書くと、コンパイラエラーが発生してしまいます。
#include <stdio.h>
int main(void)
{
printf("私の好きな記号は”です”); 赤マーカーを文字列リテラルと見なします。
return 0;
}
Cのコンパイラは、2つの二重引用符(”)で囲まれた部分を文字列リテラルとして認識します。そのため、「私の好きな記号は」までが文字列となり、それ以降は不明な文となりエラーが発生します。
エスケープシーケンスを用いた例
上記のエラー対策として、エスケープシーケンスを用いることで、文の途中の”が画面に表示する記号であることをコンパイラに認識させます。
#include <stdio.h>
int main(void)
{
printf("私の好きな記号は¥”です”); 赤マーカーを文字列リテラルと見なします。
return 0;
}
その他にも、円記号は¥¥と記述する必要があり、画面に¥5000と表示するには、「¥¥5000」と記述する必要があります。