C++BuilderとDelphiの違いに関する小ネタ×2
その1:
TurboPowerのパッケージをC++Builder2007でビルドしたら、constブロックで定義している変数に値を代入していてエラーになる。('A`)
ソースコードを追いかけると、どうも、C/C++でいうstatic変数っぽい使い方をしている模様。
Delphiは「静的変数」なるものがなく、「定数」で代用していたのか・・・。
回避方法として、[プロジェクト]-[オプション]-[Delphi コンパイラ]-[コンパイル]の"書き込み可能な構造化定数"を有効にすれば問題なし。
で、そのパッケージをインストールしようとすると、「パッケージはデザイン時に使用できません」みたいなメッセージが表示されて、C++Builder2007に登録できない。ヽ(`Д´)ノ ウワァァァン C++Builder6だと問題なかったのに。(´・ω・`)ショボーン
sf.netのフォーラムとか覗くと、同じ問題でコケている人がいるみたい。
その2:
NaN(非数)の判定が、VCL標準だとMath::IsNanで、JCLだと、Jclmath::IsNaNになっている。
下手に"using namespace"なんて使った日には地獄をみるな・・・。
おいら自身、"using namespace"は大嫌いだから滅多に使わないけど。
その上、NaN定数が、JCL(JclMath.hpp)だと"static const NaN = 0.0 / 0.0;"になっている。
オリジナルであるJclMath.pasの当該部分をみると、
Infinity = 1/0; // tricky {$EXTERNALSYM Infinity} NaN = 0/0; // tricky {$EXTERNALSYM NaN} NegInfinity = -Infinity; {$EXTERNALSYM NegInfinity} {$HPPEMIT 'static const Infinity = 1.0 / 0.0;'} {$HPPEMIT 'static const NaN = 0.0 / 0.0;'} {$HPPEMIT 'static const NegInfinity = -1.0 / 0.0;'}ってなっている。($HPPEMITはこの前のデベロッパーキャンプのネタだね。)
いいのか?本当ににいいのか?