2013年7月29日月曜日

プログラミングの心構え

前回、超有名な!?プログラムは心構えが足りないと書きました。

その心構えについてです。

再掲 超有名!?なプログラム
#include <stdio.h>

main()
{
    printf("Hello, Work!\n");
}

実はこのプログラム、オプションを付けてコンパイルすると警告がでます。

root@ubuntu:~# cc -Wall -o hellowork hellowork.c
hellowork.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
hellowork.c: In function ‘main’:
hellowork.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]

 -Wall オプションをつけるとコンパイラの警告チェックが厳しくなります。
プログラムに致命的ではないが、何らかの問題があることを指摘してくれます。

警告の内容は、こんな感じです。^^;
 main()関数の戻り値が書いてないから、デフォルトの int にするけどいいよね?
 main()関数の戻り値書いてないけどいいの?、voidではないみたいだけど。
 
この警告に限れば、 無視して実行しても動作上の影響はありませんが、
警告一つで、実行できなかったり、期待通り動作しないという場合もあります。

また、システム開発の現場では、ソフトウェアの品質問題にも繋がるため
極力なくすようにしているかと思います。
 
 せっかくコンパイラが親切に教えてくれているのです。
-Wall オプションを付けて日頃から、警告のないプログラムを作成したいものです。

そもそも人に何か指摘されるのって、嫌じゃないですか? 

警告のないようキチンと書くとこうなります。

キチンとした超有名!?なプログラム
#include <stdio.h>

int main(void)
{
    printf("Hello, Work!\n");

    return 0;
}

キチンとしたC++版超有名!?なプログラム
#include <iostream>

int main(void)
{
    std::cout << "Hello, Work!" << std::endl;

    return 0;
}


どうでしょうか? -Wall をつけてコンパイルしても warning がでなくなっているはずです。
コンパイラがぐうの音も出せない、品質が良いプログラムになりました。^^

ところで、C++版の方の std::cout, std::endl って記述は何か面倒くさいなと感じませんか?
次回はこの辺りについて触れたいと思います。



今日の名言
肝だめしに夜、墓地を一人で歩く少年は、さも陽気そうに口笛をぴーぴー吹き鳴らす。
すると恐怖心は口笛で「吹き飛ばされ」、墓地を歩くのが怖くもなんともなくなる。これと同じように、
自分のふさぎきった心を口笛で吹き飛ばして、他人までふさぎの巻き添えにしないよう気を配る者が、もっといてもよさそうなものだ。楽しそうに振舞っていると、いつか本当に楽しくなる。物事に
熱中するにはこの手に限る。仕事にしろ会議にしろ、面白くてたまらないといった態度で取り掛かれば、いつの間にか本当に熱中している自分に気がつくものだ。
                                      デール・カーネギー

もし何かを恐れているなら、他の人々もまたあなたと同様、何かに対して恐怖心を持ったことを思い出していただきたい。「こんなことを人から言われやしないか?」、「上司から叱られるかもしれない」、「近所の連中の噂話が気になる」-こうして並べてみると、どれもこれも未来のことばかりだ。
つまり過去は怖くないのだ。何が起こったかをちゃんと分かっているし、思ったほど大したことでもなかったのだから。しかし未来は一寸先もわからない!未来の恐怖と闘う方法は簡単である。
「なぜ恐ろしいのか」という理由を一つ一つ考えてみれば、怖さも薄れてくる。最悪の事態がどの程度なのかわかれば、怖がることもなくなる。あなたは、こう呟くだろう。「何だ、あれ位の事など!」
                                      デール・カーネギー