いつもながら適当なことをつらつらと

新年明けたのに何も書かないのもなあと思ったので書いてみます。

プログラミングの継承について

去年の暮れにあるプログラムを3つほどPythonで書いてたんですが、3つとも初っ端の書き出しの部分が同じ処理をしているんですよね。まあ、コピペすればいいだけの話なんですが、見栄えがよろしくないというのと保守性が悪い(だれかにソースコードを見てもらう必要がないので、これに関しては気にしてはないのですが)ということからどうにかならんかなと思ってました。そこで継承したらいいんじゃね?と思いつきまして、実際書いてみたら、まープログラムの見通しがよくなりましたね。今まで、継承って何のためにあんのかな―とか、GUIプログラミングしないなら使わんかとか思ってましたが、使ってみるといいもんですね。必要性を感じていなければ理解できない、と昔から自分は思っているんですが、まさにその通りだなと思いました。これからも継承使っていきたいですね。そこまで同じ処理をさせるプログラムを組むことがあるかどうかは疑問ですが。

C/C++コンパイルについて

今までCの文法とかはそこそこ学んできていたんですが、コンパイルとかは最低限のことしかしてきませんでした。まあ、コンパイルできればいいかみたいなことですね。ただ、Cのソースコードを実行するにもいくつか方法があるようです。

以下に書くのはあくまで自分の理解です。はっきり言ってあまり調べこんだ内容ではないので正確ではないと思います。
  • ただのコンパイル
    一番主流というか、簡単というか、これがそのままコンパイルって感じですかね。ソースコードをオブジェクトファイルにします、的な。ファイルが分割されているとそれぞれコンパイルされた後、ファイル同士を結合するリンクという作業が行われるようです。

  • ビルド
    IDEを使ってコンパイルすること。IDEの中ではプロジェクトという単位でプログラムを管理しているようで、プロジェクトの中に幾つもの分割されたファイルがあるというイメージですね。ビルドはそのすべてのファイルのコンパイルとリンクを行うことをいうようです。ただのコンパイルとの違いは、ただのコンパイルは各ファイルを手動でコンパイルして、リンクして、としなければなりませんが、ビルドはIDEが全部やってくれるので、簡単です。RUNボタン押すだけで、全てやってくれるという感じでしょうか。

  • メイク
    調べてみるとどうも廃れつつある技術のようですが、概要としてはコンパイラmakefileというレシピみたいなものを渡して、自動的にコンパイルとリンクをしてもらうという感じですかね。ただのコンパイルとの違いは、ただのコンパイルは分割ファイルをそれぞれコンパイルして、最後にリンクしなければならないのですが、メイクはmakefile内の指定したファイルをすべて勝手にコンパイル・リンクしてくれるというイメージです。まあ、ビルドと似たようなもんなのかな、と思います。ビルドと似たようなものだし、makefileを書く必要があるので、メイクの方が手間のかかる印象を受けます。IDEが登場して、しかもパソコンの性能もUPしているので、あまりメイク自体は使われなくなりつつあるのかと勝手に推理してます。

まあ、だいたい3種類くらいあるようですね。と言ってもビルドもメイクもコンパイルを内包しているんですが。ソースコードコンパイルして、リンクする、という流れはすべて同じかと思われます。それをすべて手動でやるのか、ちょっと楽するのか、だいぶ楽するのかの違いなのかなあと素人考えでは思ってます。

あと試してみたのですが、gccコンパイルはいくつかの.cファイルを一気にコンパイルすると勝手にリンクまでやってくれるようで、

gcc -o foo ./*.c

とやってやると、カレントディレクトリ内のすべての.cファイルをコンパイル・リンクしてfooという実行ファイルを作ってくれます。(たぶん)これができるならメイクいらなくね?とは思うのですが、素人にはわからない違いがあるんでしょうか。

あとわりと最近知ったのですが、上の例でいうとfooという実行ファイルをダブルクリックすると起動してくれるんですね。初めて知りました。ターミナルから起動しなくていいから便利です。

ってな感じで、新年早々長々と文章を書いてみました。久しぶりすぎて文章かけないですね。ってか久しぶりじゃなくても文章って書けなくなってますね。本読まないとだめですね。ってな感じで、またいずれ。