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

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

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

プロローグ:程好く枯れたプログラミング言語・C/C++

2006年7月19日

Visual C++
ExpressEdition
付属

いやぁ、便利になったもんだなぁ。
今、私の手には一枚のCDがある。
表面にはマイクロソフトのロゴマークと、
"Visual C++ 2005 Express Edition"の文字が・・・
先ほど、本屋で購入した雑誌のおまけだ。
これは無駄にする手はない、と良からぬ(?)思惑が頭の中を駆け回る。

無論、販売用パッケージとの落差はあるものの、雑誌の価格程度でGUI環境を含む開発環境が、手に入ってしまうのはありがたい。
遥か昔、高価なコンパイラを購入したあげく、使いこなすこともできなかった私にしてみれば、最後のリベンジチャンスと云えよう。
なにか作りたい、いや、作らなければもったいない・・・

キラキラと輝くその円盤は、愚かな中年男を洗脳するかのように、右手のひらの上でせせら笑って手招きしていた。

自宅に帰った私は、はやる気持ちを抑えつつインストール作業に入る。
待ち時間は、雑誌を斜め読みしながらつぶす。
どうやらこのパッケージには、"PlatformSDK"が入っていないらしい。
なに、むかし一度(どころではないが)挫折しているとは云え、"WindowsSDK"くらいなら齧ったこともある。
"PlatformSDK"と云われれば、何のことなのかくらい想像がついた。

PlatformSDKで検索して頂いた方々へ
PlatformSDKとは、Win32APIを利用する為のライブラリです。
このSDKのみを利用して製作されたアプリケーションは、各種ランタイム等を必要としないものとされています。
但し、全バージョンのWindowsOSでの動作が保証されるわけではないので、ご注意ください。
PlatformSDKは、Windowsアプリケーションが必要とする全ての基本機能を提供しているものと思われますが、.NET Frameworkを利用してプログラミングする場合は必要ありません。
本連載はWindowOS上でのプログラミング例をご紹介していくものですが、その際Win32APIを利用していきます。
従って、本連載に御興味頂けた方は、PlatformSDKのセットアップをお薦めしております。

早速マイクロソフトのサイト(以降MSDN)でダウンロードしてみることにする。
なに、必要なファイルさえ手に入れてしまえば、あとは何とでもなろう。
そんなことを考えつつサイト内を眺めていると・・・
なんと、このツールで"PlatformSDK"を使う際の方法が、詳しく説明してあるではないか。
しかも、殺してあるウィザードの開放方法まで記されている。

・・・なんで最初から入れておかないんだろう?
などとも思ったが、丁寧に書かれた文面に反感を抱く気にもなれず、素直に指示に従うことにした。
時はまさしくWindowsVista発売直前
".NET"とやらへの移行を推進していたマイクロソフトの思惑が、そこにはあったのかもしれない。

ひととおり準備を整えた私は、とりあえずC言語の基本を見つめなおすことにしていた。
長い歴史のあるプログラミング言語C/C++は、小さな機能部品をいくつも組合わせる形でコーディングしていく。
この機能部品は、数学用語であるところの"関数"と呼ばれるわけだが、なるほど、確かに仕組みが良く似ている。
因みに、プログラミングでの"関数"は時折り"プロシージャ"と呼ばれることもあるようだ。

プロシージャで検索して頂いた方々へ
上記で”関数”=”プロシージャ”のような表現をしておりますが、正確には間違っており、プロシージャと呼ばれる関数がある、と表現するべきです。
プロシージャ関数とは副作用を持つ関数のことです。
副作用とは、その関数の外の状態に影響を及ぼす行為のことです。
画面表示の関数、ポインタを用いて自関数外の変数に影響を及ぼす関数などがプロシージャ関数です。
対して、副作用を持たない関数をファンクション関数と呼びます。
プロシージャ関数は返り値を持ちません。
この場合の返り値も、自己の状態(TRUEやFALUSE)を返すものは含まれません。
なじみのない方には非常に理解しにくい考え方ですが、例えば下のサンプルはプロシージャ関数ではありません。
int型の返り値を持つファンクション関数です。

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

int     F( int  x)               //関数の名前を定義
{
       return  5* x+ 7;        //f(x)の解答を返す
}
ソースのダウンロード

試しに打ち込んだソースは、関数F(x)=5x+7をC言語風にしたもの。

これが実行ファイルに出来ないことくらいはいくらなんでも知っててやっているわけだが、統合環境の下のほうにでるエラー内容を確認する意味で作ってみた。

このソースをビルドするとコンパイラはとおる。
しかし、リンカがエラーを出すため実行ファイルには出来ないよ、とこういうわけだ。
予想通りの結果に、なにやら嬉しくなる。

で、今度はこんなソースを用意してみる。

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

int     main( int  x)           //関数の名前を定義
{
       return  5* x+ 7;        //f(x)の解答を返す
}
ソースのダウンロード

プログラムには必ず始めと終わりがある。
だからC言語と云うやつでは、どこからプログラムを走らせるのか明確にしてやらないといけない。
そこでmain関数なるものが考え出されたに違いない(←私の思い込みです、すいません)。

これをどうやらエントリーポイントの定義と呼ぶらしい。
C言語のプログラムとは本来、沢山の関数の塊で出来ている。
大概の関数は、プログラマーの勝手な判断で命名され作り出されるものだが、main関数だけは言語の仕様で定められた、唯一の関数だと思う。

標準関数も言語の仕様だと云われれば、確かにそうなのかもしれないが、あれらはあくまでライブラリ。
インクルードしなければ使えないし、インクルードされていなければ同じ名前の関数を作ったところで問題にならない。

ところで、この計算結果はどこへ行ってしまうのだろうか?

出来上がった実行ファイルをコマンドプロンプトから実行しながら、ふとそんなことを考えてみる。

<目次> <次章>



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