私はクラスのためにこのプログラムを書きました。私はそれがGNUg ++コンパイラでうまくコンパイルして実行されることを発見しました。私の教授は、Microsoft Visual Studioコンパイラを使用している彼のWebサイトからプログラムを自動評価し、エラーをスローします。また、BSD clangコンパイラでこのプログラムを試しましたが、まったく異なるエラーが発生します。
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
double dec2Bin(int value, char binaryString[])
{
int x = 1;
string hold = "";
while(x <= value){
x *= 2;
}
x /= 2;
while(x >= 1){
//cout << x << " ";
if(value > x){
hold += "1";
value -= x;
}
else if(value < x){
hold += "0";
}
else if(value == x){
hold += "1";
value = 0;
//return hold;
}
x /= 2;
//cout << hold << endl;
}
return atoi(hold);
}
int main()
{
char binstr[100];
int num = 0;
cout << "Enter a decimal string: ";
cin >> num;
cout << "its "<<dec2Bin(num, binstr) << endl;
}
これらすべてのコンパイラの違いは何ですか?コードがどのコンパイラでも機能することを確認するためにできることはありますか?
あなたのコードは正しくなく(関数が代わりにインスタンスを期待するときにインスタンスatoi
を渡すことを呼び出す)、それはきれいにコンパイルされるべきではありません。常にすべての警告を有効にすることを学び、それらの意味を理解することを学びます。std::string
const char *
ただし、質問で述べられていることは実際にC ++で発生する可能性があり、その理由は「未定義の動作」です。
ほとんどの場合、C ++プログラムで実行時に何か間違ったことをすると、何が起こるかはまったく予測できません。クラッシュしたり(運が良ければ)、意味のない結果が得られたり(運が良ければ)、エラーがあっても問題なく動作する可能性があります(最も危険ですが一般的なケース)。もちろん、動作はコンパイラ、OS、月の満ち欠けによって変わる可能性があります。
C ++に適用されるマーフィーの法則は、プログラムをテストしている間はすべてが機能することを示していますが、上司や両親を含む大勢の人の前で大画面にプログラムを表示しているステージでは、惨めに失敗します:- )
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加