1-3. コメント文・使用できる文字
コメント文とはプログラムに注解を付け加えて動作や意味を解説するために使われプログラムを読みやすくするためのものです。
それでは、最初にプログラミング例を見てみましょう。
/* 文字を出力するプログラム */ #include<stdio.h> /* stdio.hをインクルードするprintfを使用するのに必要 */ main() /* メイン関数の始まり */ { printf("文字列"); /* 画面に文字列と表示する */ } /* プログラムの終わり */
上のプログラムで /* から */ までの部分がコメントになります。
コメント文はコンパイル時に無視されるのでコメントの中身の書式は自由です。
漢字はもちろん改行しても影響ありません。ただし、*/ がある時点でコメント文が終了になるので、コメント文中にコメント文を入れ子にすることができません。
上のプログラムを例に取り、printf関数のある文をコメントアウトしようとするとき、
/* printf("文字列"); /* 画面に文字列と表示する */ */
のようにprintf関数の上下にコメント記号を挿入すればいいのですが、printf関数のあとにコメント文が続いているので実際のコメントの終わりはprintf関数のある行の最後になります。
よってこの場合、一番最後の */ が余りコンパイルエラーになります。
そのときprintf関数の直後の /* はコメント文の内容として無視されているのです。
これらのことから、新たにコメントアウトする時は、現存のコメント文が入ってないか気をつける必要があります。
◇使用できる文字
ここでは、C言語に記述できる文字について説明します。
プログラム中でCコンパイラが認識できる文字は半角英数字記号と制御コードつまり下の表のASCIIコードになります。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
0 | NUL | *** | SP | 0 | @ | P | ` | p |
1 | *** | *** | ! | 1 | A | Q | a | q |
2 | *** | *** | “ | 2 | B | R | b | r |
3 | *** | *** | # | 3 | C | S | c | s |
4 | *** | *** | $ | 4 | D | T | d | t |
5 | *** | *** | % | 5 | E | U | e | u |
6 | *** | *** | & | 6 | F | V | f | v |
7 | *** | *** | ‘ | 7 | G | W | g | w |
8 | *** | *** | ( | 8 | H | X | h | x |
9 | *** | *** | ) | 9 | I | Y | i | y |
A | NL | *** | * | : | J | Z | j | z |
B | *** | *** | + | ; | K | [ | k | { |
C | *** | *** | , | < | L | \ | l | | |
D | CR | *** | – | = | M | ] | m | } |
E | *** | *** | . | > | N | ^ | n | ~ |
F | *** | *** | / | ? | O | _ | o | *** |
表の上の数字は文字コードの上位3ビットを表し、左の数字は下位4ビットを表しています。(わからなくても問題ありません)
この表の中のSPは空白(半角スペース)、
NULは空または数値の0、
NLは改行( New Line ) UNIXの改行
CRは復帰( Carriage Return )DOS・Windowsの改行
また、全角文字はこの表にないのでコンパイルエラーになります。
全角スペースもだめです。
そして***で伏せている所も制御コードが入っていますが記述できるものではないので敢えて伏せています。
それでは、いままでprintf()のなかで漢字が使えたのは?
このことについては、のちのち解説することになりますが、ここでは ” で囲まれた部分はいったん数値に置きかえられるためエラーが発生しないようになっています。(詳しいことは後にして ” に囲まれたところは漢字OKだと覚えてください。)
次に、コメントの中が漢字でもいいのは?
コメント文はコンパイル時に無視されるので漢字でも特殊記号でもOKです。
NLは改行( New Line ) UNIXの改行
CRは復帰( Carriage Return )DOS・Windowsの改行
について、覚え方としては良いのですが『方便』のままにすると後で困るので以下に説明します。
(補足説明)
UNIXの改行 NL(New Line) Code 0A (前回の表を参照)
Windowsの改行 CR+LF( Carriage Return + Line Feed) Code 0D 0A
NLとCRの説明は正しいのですがWindowsの改行の説明が変だったので説明を付け加えました。それともう一つ NL と LF は同じコードです。
コード体系によって働きが違います。つまりUNIXとWindowsで比較しているのはコード体系が違うからです。
ということで大まかに3つ紹介します。(C言語から脱線している…)
ASCII アメリカ標準のコード(実際は世界的標準かも)
EUC ASCIIを拡張しUNIXで2バイト文字(漢字等)を使うためのコード体系
JIS 日本工業規格のコード体系
この中でEUCは完全にASCII互換ですが、JISとASCIIでは1バイト文字でもわずかな違いがあるため上のような違いがあります。
HP関連(CGI)でプログラミングする人は知っていてもいいと思います。