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

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はこの前のデベロッパーキャンプのネタだね。)
いいのか?本当ににいいのか?