読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

STED2の再コンパイル

解析を進めるにあたり、やっぱり動きを見ながらのほうがわかりやすいので、Windows 8上でコンパイルして動かしてみることにした。以前Windows 7上で動かしていたものをベースにして、コンパイルだけやり直そうかなと思ったのだが、どうせなのでプロジェクトの構成も変えることにした。

内部的には5-6個のスタティックライブラリと本体で構成されていたのを、一本のプロジェクトにまとめることにした。全体をコンパイルし直してもそんなに時間もかからないので、あまりわける意味もないので。

今後のためにWinRTサポートも入れることにした。そうしたら純粋なC言語ソースがコンパイルできなくなった。というか.cファイルがコンパイルできなくなった。なので拡張子を.cppに変更してコンパイルすると、結構というか大量のエラーが発生した。

エラーは関数のプロトタイプ宣言の部分で大量に発生していた。C++では引数もきっちり指定する必要があるが、C言語ではどうも引数はいらず、戻り値と関数名()だけ書いておけばOKのようだ。なので関数の引数名を調べて、プロトタイプ宣言をすべて直すことにした。なんというかこのC言語の宣言はプロトタイプ宣言兼extern兼前方宣言といった感じのもので、非常にあいまいな感じがする。しかもexternしていないのに他のソースの関数を使っていたりとかしている部分もあるが、これもCでは大目に見てくれるのであろう。

次に多いのが、キャストのエラーである。型のキャストに関するチェックがC++は厳密なので、CではOKなcharとunsigned charの暗黙変換もC++ではNGになる。

あとは関数の引数が足りないとか、細かい問題がある。なぜか関数の引数が2個あるのに1個で呼び出しているところもあったりする。これもC言語では許されるのだろうか..。

今まではC++はCの拡張みたいな感じでとらえていたけれども、CとC++って違う言語なのだな。C++のソースと、Cソースを別プロジェクトにしていた理由もよくわかった。