2016-12-17 97 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 64位旗艦版/專業版或Windows 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臺獨立的電腦上試過了,它們都表現出相同的行爲。所以我不認爲機器是問題。 我也試過使用不同的編譯器,但我不知道我是否正確配置它們,並且它們沒有調試器?我試過Borland C++ and Digital MarsBorland有一個新的版本10.1,而不是代碼塊支持的5.5,我不能讓新的工作。 我甚至不知道這是編譯器還是程序問題?

我想學習C++,這是非常煩人的。我們的老師在課堂上使用相同的軟件,但是在Linux上,它完美地工作。

Off topic:有沒有辦法在這裏插入帶有行號的代碼?首先在這裏發佈,所以我仍然是新的:)。

謝謝!

+1

使用更嚴格的編譯器選項。 – juanchopanza

+0

您使用的是哪個版本的GCC?因爲就像你說的那樣,不應該用任何C++編譯器的版本進行編譯。 –

+0

什麼是問題?爲什麼不正確的代碼行爲不確定? – Fureeish

回答

1

轉至 「項目」 - > 「編譯選項」 - > 「編譯器設置」 選項卡 - > 「編譯器標誌」

和禁用-fpermissive

-fpermissive降級了一些關於從不符合標準的代碼診斷錯誤警告。因此,使用-fpermissive將允許編譯一些不合格的代碼。

或使用你的代碼的頂部編譯禁用它:

#pragma GCC diagnostic ignored "-fpermissive" 

你也可以嘗試在「編譯器標誌」標籤

BTW添加標誌「-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

[編輯]添加了#pragma – Rama

0

正如Rama說的,您可能已經在您的代碼塊中啓用了-perfiveive。 轉至「項目」 - >「編譯選項」 - >「編譯器設置」選項卡 - >「其他選項」並刪除-fpermissive。