は、Alphaでは無限ループに陥ってしまうか、Abortする。Alphaで動く
ようにするには、
std::string str("irohanihoheto");
unsigned long int p;
while(1)
{
p = str.find("12345");
if (p == std::string::npos) break;
}
のように unsigned long int 型にする必要がある。
ともかく、integerは long にしておくのが無難である。
3. Alpha固有の問題ではないが、中には、namespace std の中の関数はいつも
関数名だけで使えると仮定して作成されたプログラムもある。(特に cout、
さらにvector系の関数の使用にこの過ちが多い。) g++-3.xからは厳しくな
ったので、
using namespace std;
を使用してごまかす。
また、 friend A; と class を抜かした書き方が見られることもある。
friend class A;
に直しておく。
4. これもAlpha固有の問題ではないが、一般に変数や配列要素は 0 や 0.0 を初
期値に持つとは限らない。x86上で動くg++は初期値に何も指定しなくても勝手に要
素が 0 や 0.0 の配列やベクトルを生成する癖がある。これに依存してコードを書
いていた場合、同じコードをAlpha上のg++でコンパイルすると、配列やベクトルの
各要素の初期値が NAN や -NAN になることが多いから注意すべきである。
特に、他人が作った行列計算用のクラスを使用する場合、各要素が正しく初期化され
ているかどうか検証すべきである。往々にしてコンストラクターで初期化を忘れてい
て、計算結果が NAN ばかりであったり例外が発生して計算が止まったりする。
Alphaはリトルエンディアンであるし、それほど労せずともプログラムを動作させることは出来る。
戻る