検索
連載

開発環境を有効に使う目指せ! Cプログラマ(6)(3/3 ページ)

開発環境を使ったプログラミングについて解説します。プログラム上のミス、いわゆるバグを発見するのに役立つデバッガを使ったデバッグの基礎についても学びます。

Share
Tweet
LINE
Hatena
前のページへ |       

字句解析について知る

 Cのプログラムをよく眺めてみると、同じことをするプログラムでも、書き方が人によって少しずつ異なっていることが分かります。

 例えば、あるHello Worldプログラムを見てみましょう。これは、PleiadesでHello Worldプロジェクトを作ったときに生成されるコードから、コメントを除いたものです。

#include <stdio.h>
#include <stdlib.h>
int main(void) {
	puts("!!!Hello World!!!");
	return EXIT_SUCCESS;
}

 よく見ると、いくつかスペースやタブが入っていることが分かります。「int」と「main」の間にはスペースが入っていますし、「main(void)」と「{」の間にもスペースが入っています。「{」のうしろには改行があって、「puts」の手前にはタブが入っています。

 実は、これらのスペースやタブは、Cプログラムにとって必要なものと、そうではないものがあります。

  • 「int」と「main」の間にあるスペース:必要
  • 「main(void)」と「{」の間にあるスペース:なくてもかまわない
  • 「{」のうしろにある改行:なくてもかまわない
  • 「puts」の手前にあるタブ:なくてもかまわない

 なくても構わないものは、もしそれがなくてもプログラムはコンパイルできますし、実行にも問題がありません。ただ、読みやすくするために入っているだけです。

 しかし、必要なスペースやタブをなくしてしまうと、コンパイルエラーになります。

 なぜこのようになっているかを知るためには、コンパイラが行っている「字句解析」という処理について知る必要があります。字句解析とは、文字の並びを意味のある単位に分けることをいいます。

 といっても、それほど難しいことはありません。Cコンパイラが処理する字句とは次の物を指します。

  • キーワード(intやdoubleといった、Cで予約されているワード)
  • 識別子(変数名や関数名など、オブジェクトを識別するための名前)
  • 定数
  • 文字列リテラル
  • 区切り子(わずかな例外を除いて演算子のこと)

 C99のキーワードは37個の種類があり、その中には連載のこれまでの記事では説明していないものもあります。すでに説明したものでキーワードに相当するものとして、intやdoubleといった型名や、sizeof演算子、typedefがあります。

 Cコンパイラが備える字句解析は、これらのものがソースコード中に現れると、それぞれを字句として分割していきます。文脈から明らかに字句として分けられるものは、スペースがなくても分けてくれます。

 ところが、もし「int main」にスペースがなかったら「intmain」となりますが、これを「int」と「main」に分ける、ということは行われません。「intmain」という、1つの字句として解釈されます。なぜなら、「intmain」という文字列は、字句の1つである識別子として解釈することが可能だからです。

 逆に字句の分かれるところにはスペースを入れることができます。「main(void)」は「main ( void )」と書いても問題ありません。スペースがあってもなくても、同じように字句解析が行われます。

 このようなルールで字句解析が行われますが、Cプログラムの字句はスペースや記号という直感的に分かりやすいところで分割されますので、字句解析のルールがあまりよく理解できなくても違和感なく読めると思います。もちろん、理解できていればさらにスムーズに読み書きできるでしょう。

 ちなみにスペースを入れることができるところには、スペースをいくつ書いてもかまいません。さらには、スペースの代わりにタブや改行を入れることもできます。これらを駆使することで読みやすいプログラムを書くことができます。

他人の書いたプログラムを読もう

 自分一人でプログラムを書いていると、正しいのか間違っているのか、あるいは見当違いのことをやっているのか、分からなくなることがあります。まわりに聞ける人がいるときには、素直に聞いてみましょう。

 聞ける人がいないときには、インターネットでほかの人が書いたプログラムがどうなっているか探してみましょう。Webにはさまざまなソースコードが公開されていますが、ここではそれらをまとめて検索してくれるGoogleソースコード検索を紹介しておきます。

 「http://www.google.com/codesearch」にアクセスして、検索ボックスに何かキーワードを入れてみましょう。ただしそのままでは、ほかの言語のソースコードも一緒に出てきてしまいますので、検索キーワードと一緒に「lang:c」と指定します。これでCで書かれたソースコードだけが表示されます。ただし、お手本としたいソースコードと、そうでないソースコードがあります。もちろん、見分けることは難しいのですが、有名で更新が頻繁にされているオープンソースソフトウェアのコードであれば、お手本として良いと筆者は考えています。1つの目安程度にしかなりませんが、参考にしてください。

 基本をきちんと押さえることと、たくさんのコードに触れることが上達の近道です。ほかにもWebにはたくさんのソースコードがありますので、連載のお供にしてみてください。

今回学んだこと

  • Pleiadesでのコンパイルの様子はコンソールの「C-ビルド」に表示されます。
  • Pleiadesと同じようにコマンドプロンプトからもコンパイルできます。
  • 作成したプログラムはPleiadesを使わなくても実行できます。ほかのPCに持って行って実行することもできます。
  • Pleiadesでデバッグ パースペクティブに変更し、プログラムの実行をステップごとに確認しました。
  • printfの基本的な使い方と、書式文字列の種類について学びました。
  • コメントには2種類の書き方があります。
  • main関数はプログラムが始まるところです。
  • Cコンパイラにおける字句解析について学びました。

Index

開発環境を有効に使う

Page1
コンパイルについてもう少し詳しく
コンパイルしたプログラムを実行する
デバッガを使う

Page2
printfによるデバッグ
コメント(注釈)を使う
main関数

Page3
字句解析について知る
他人の書いたプログラムを読もう
今回学んだこと


Profile

長沼 立巳 SSS(G)

小山博史 ガリレオ


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る