演算子とは、+ や - といった計算式に用いられる記号を表します。分かりやすいのは5 + 10のような簡単な計算式です。この場合、定数5と10を加算することを表す + 記号が演算子となります。これまでのサンプルでは計算式を書いていませんが、実は printf()関数の呼び出しに使っていた対になっている ( ) は演算子に該当します。この演算子は、関数を実行するという作用を持ちます。
区切り子は、構文上の意味しか持たず、演算子のような作用を持たない記号を表します。main() 関数の小かっこ ( や ) 、中かっこ { や } は区切り子に該当します。
上記の字句のうち、演算子と区切り子は字句を区切る性質を持ちます。例えば、次の計算式
5 + 10
は、定数と演算子の間にスペースがありますが、スペースがなくても演算子で字句を区切ることができるため、次のように書いても問題はありません。
5+10
Sample01 のソースコードを、字句単位に分解し、字句を次のように分類できます。
表01 字句の分類
字句 | 種類 |
---|---|
int | キーワード |
main | 識別子 |
( | 区切り子 |
void | キーワード |
) | 区切り子 |
{ | 区切り子 |
printf | 識別子 |
( | 演算子 |
"Kitty on your lap\n" | 文字列リテラル |
) | 演算子 |
; | 区切り子 |
return | キーワード |
0 | 定数 |
; | 区切り子 |
} | 区切り子 |
このように、コードを字句単位に分解して考えられるようになれば、ミスを発見しやすくなるでしょう。
逆に考えれば、字句さえ正しく分解できれば、自由に空白や改行を入れることができます。次のソースコードは Sample01 を崩したものですが、字句の並びが同じなので正しくコンパイルできます。
Sample03
#include <stdio.h>
int
main (void
) {printf
("Kitty on your lap\n"); return
0;}
実行結果
Kitty on your lap
Sample03の実行結果 |
見た目はSample01と異なりますが、字句に分解してみれば、全く同じコードであることが分かります。
これまで、main()関数の内のコードをタブでインデントしていたのは、単にコードを読みやすくするための配慮です。Sample03のように、字句が正しく区切られていれば必須のものではありませんが、誰が見てもSample03よりSample01の方が読みやすいでしょう。多くの慣れているプログラマは、何らかの中に含まれるコードを単位にインデントを深くします。