2016-12-17 17 views
0

私は、次のコードを持っている:コードブロック間違ってC++出力

#include <iostream> 

using namespace std; 

Sum (int a, int b) 
{ 
    int x = a - b; 
    //cout << x << " \n"; 
    return x; 
} 

int main() 
{ 
    int s1 = Sum(3, 6); 
    cout << s1; 

    return 0; 
} 

システム情報:プロフェッショナル 勝利7のSp1のx64アルティメット/または勝利8.1 x64の コードブロック16.01 MinGWの デバッガ名とバージョン:GNU GDBを(GDB)7.6.1 コンパイラ:GNU GCCコンパイラ

このコードは問題なくコンパイルされますが、これは問題です。エラーが発生するはずです。

1)関数合計、http://cpp.sh/に戻り値がありません。このため、コンパイルできません。

2) "return x"を書くか​​どうかにかかわらず、変数のs1の値は-3です。

は、それが何らかの形でx毎回の値を渡しますが、私は上記のcoutのステートメントのコメントを外した場合、「return xは」すべてが期待通りに動作するように開始し、どのような地獄:) - >s1は、ランダムな値を持つことになります時に何のreturn文ません(関数呼び出しに使用される前に初期化されていなかったため)、returnがある場合は-3になります。

私は3つの別々のコンピュータでこれを試しましたが、すべて同じ動作を示します。だから私はマシンが問題だとは思わない。 別のコンパイラを使ってみましたが、正しく設定してもデバッガが正しくないのかどうかわかりません。私は試しましたボーランドC++デジタル火星ボーランドには、コードブロックでサポートされている5.5ではなく新しいバージョン10.1が用意されています。 これがコンパイラやプログラムの問題であるかどうかわかりません。

私はC++を学ぼうとしていますが、これは非常に面倒です。私たちの先生はクラスで同じソフトウェアを使っていますが、のLinuxにあります。

トピックオフ:ここに行番号のコードを挿入する方法はありますか?最初の投稿はまだ私はまだこれで新しい:)。

ありがとうございました!

+1

より厳密なコンパイラオプションを使用します。 – juanchopanza

+0

どのGCCのバージョンを使用していますか? C++コンパイラのどのバージョンでもコンパイルしてはいけないと言っているからです。 –

+0

質問とは何ですか?間違ったコードが不定に動作するのはなぜですか? – Fureeish

答えて

1

ゴーへの "プロジェクト" - > "オプションのビルド" - > "コンパイラの設定" タブ - > "コンパイラフラグ"

から不適合コードに関する-fpermissive

-fpermissiveダウングレード、いくつかの診断を無効にします警告に対する誤り。したがって、-fpermissiveを使用すると、一部の 不適合コードをコンパイルできます。

またはあなたのコードの先頭にプラグマを使用して、それを無効にします。また

#pragma GCC diagnostic ignored "-fpermissive" 

あなたは

ところで「コンパイラフラグ」タブで「-pedantic」フラグを追加しようとすることができます:

あなたはonlineしよう:

#pragma GCC diagnostic error "-fpermissive" 

using namespace std; 

Sum (int a, int b) 
{ 
    int x = a - b; 
    //cout << x << " \n"; 
    return x; 
} 

int main() 
{ 
    int s1 = Sum(3, 6); 
    cout << s1; 

    return 0; 
} 

あなたはあなたが説明したのとまったく同じ動作をしました!

+0

自分のマシンで-fpermissiveが有効になっているとは思わない。私はオプションのリストでそれを見つけることができません。 https://postimg.org/image/qavbl3a6n/ここをクリックして –

+0

「その他のコンパイラオプション」のスクリーンショットですか? – Rama

+0

[EDITED] #pragmaを追加しました – Rama

0

ラーマは言ったように、あなたはあなたのコードブロックで-fpermissiveを有効にしているかもしれません。 "プロジェクト" - > "ビルドオプション" - > "コンパイラ設定"タブ - > "その他のオプション"に移動し、-fpermissiveを削除してください。