時乃工房-Windowsとアマグラマーな関係-

アクセスアップにオートリンクネット リンクが自動で増殖オートリンクの登録はこちら 節約内職情報検索局
ページランク向上リンク集
役立つリンク集 Web Links
SEO対策ディレクトリ型検索エンジン Su-Jine
メニュー
トップ
アマグラミング
C++編 目次
第2章
ソフトウェア開発製品
相互リンク

<勘違いだらけのアマグラミングな日々(C++編)>

第1章 Cのソースは関数の塊(1)

2006年7月26日

C言語は関数によってのみ記述されるプログラミング言語である。
プリプロセッサ命令と呼ばれるコンパイラ指示の為の命令郡もあるが、あれはC言語そのものではないと思う。
(↑誤解なきように)
舞台の台本で言えば、プリプロセッサ命令→ト書き、関数→台詞、といったところか。
演じるのはコンパイラ、著者はプログラマー、とそれぞれよく似ていると思う。

さて、前章で実行ファイルの生成に成功したことですっかり気を良くした私は、関数の呼び出しを復習することにした。
作業自体は単純なものだ。
計算式の部分を関数F(x)としてくくりだし、関数mainから呼出してやればよい。

//List.000-003
//f(x)=5x+7をプログラミング

int     F( int  x)
{
       return  5* x+ 7;
}

int     main( void)
{
       int  answer= 0;

       answer= F(  3);     //関数F(x)を呼び出す

       return  0;
}
ソースのダウンロード

こんな感じである。

しかし、人は上から下へ文章を読むことが習慣となっている為(少なくとも私はそう)、関数main()のほうが先にあったほうがプログラムを読みやすい。
全体を見てから部分を読んだほうが、理解しやすいに違いない。

と、半ば強引に話を持っていくと、下のようなソースが出来上がる。

//List.000-004
//f(x)=5x+7をプログラミング

int     main( void)
{
       int  answer= 0;

       answer= F(  3);

       return  0;
}

int     F( int   x)
{
       return  5* x+ 7;
}
ソースのダウンロード

関数main()のあとに関数F(x)を持ってきたわけだ。

C++のリファレンス

関数mainを読んでいくと、関数F(x)が出てきて、では関数F(x)とはなんだろと考えながら読み進めていくと、関数F(x)の定義が現れる。
物事の順序が流れとして捉えられ、非常に判りやすい(と思う)。


しかし、残念ながらこのソースはコンパイラを混乱させるだけのようだ。

関数F(x)が定義されてないよ、とのたまった後で、未定義の関数F(x)が再定義されてるよ、と矛盾したエラーを吐き出してとまってしまう。

C言語では何かを使用する前に、その何かを定義しなければならない。
何かとは、変数だったり関数だったりするわけだが・・・


そこで、プロトタイプ宣言と云う手を使ってみる。

//List.000-005
//f(x)=5x+7をプログラミング

int     F(  int);           //関数のプロトタイプ宣言

int     main( void)
{
       int  answer= 0;

       answer= F(  3);

       return  0;
}

int     F(  int  x)
{
       return  5* x+ 7;
}
ソースのダウンロード

こう書いておくとコンパイラは、関数F(x)がソース上のどこかにあるんだなぁ、と思い安心して読み進めてくれるらしい。
勝手に探してくれればいいのに、と無粋な私なんか思ってしまうのだが、そこは素人の浅はかさ。
ともかくルールを守って頭で宣言しておけば間違いないわけだ。

私のプログラミングスタイルでは、まずどんな関数が必要か考え、関数本体をコーディングした後、頭に戻ってプロトタイプ宣言を書くようにしている。
カットアンドペーストと云うやつだ。
時々後ろの";"を付け忘れてコンパイラを混乱の渦へと叩き込むが、そこはそれ、アマチュアの愛嬌ってことで許してもらいたい。

しかし実は、プロトタイプ宣言とはこんな事の為にあるわけではないのだ。
上のソースなんて冗長なだけでダメダメの見本なのである。

まだ、List.000-002の方が簡潔で判りやすいではないか。

<前章> <目次> <次章>




<時乃工房>
Net Office Nakai
メビウスリング投稿掲示板には小説日記ゲームアニメコミック小学生中学生などの掲示板過去ログがあります。相互リンクも募集中。