C++のもとになったCの場合、拡張子は"c"でほぼ決まり。 ところがC++では、 "cc"、"cp"、"cpp"、"cxx"などが 使われています。
コンパイラーは拡張子を見てそのファイルの処理方法を判断します。 例えば、
てな具合です。まあ、普通は使っているコンパイラーの仕様に合わせるので、 こんなことを改めて考えることはそうないでしょうけど。
余談ですが、C++のソースファイルを見たら、「な〜んだクラスなんか使ってないし ほとんどCじゃないか」、というわけで拡張子をうっかり"c"にしたら、 変数宣言を函数の最初以外にも書いていたんで変なエラーがぞろぞろ出たことが、 過去に5回くらいあったかな。
で、拡張子がいろいろだと困るのは、ほかのコンパイラー用に書かれたプログラムを 移植するときですかね。
といっても解決方法は単純で、ファイル名を変えればいいんです。 数が多いとちょっと大変ですが、このとき間違っても、
mv *.cpp *.cp
なんてやらないように。
Windowsな人は「ファイル」メニューの「名前の変更」でせっせと変えて、 そのうち「Alt-F-Alt-M」を使った方が早いと気がついて、 指がこの動きに異常に慣れてしまったりしてね。 あ、当然「rename *.cpp *.cp」ってのもだめです。
Macな人は、やっぱりマウスでファイル名を選択して、せっせと変えるんでしょうか。 しかしこの手の作業には、マウスは絶望的に向いていませんね。
プログラムを作ろうというほどの人がこんな単純作業をひたすらやるとも 思えないんですが、じゃあどうするか。 やっぱりPERLで、
while (<*.cpp>) { ($newname = $_) =~ s/cpp$/cp/; rename($_, $newname); }
とかやるのが一番楽なんではないでしょうか。
シェルとかバッチファイルとかApple Scriptとかでもやりようはあるんでしょうけど、 PERLだと覚えたことがUnixでもWindowsでもMacでも活かせるという利点があります。