2016-12-17 1 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 궁극적 인/Professional 또는 윈 8.1 64 코드 블록 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++디지털 화성. 볼랜드은 codeblocks가 지원하는 5.5 대신 새 버전 인 10.1을 가지고 있으며 새로운 버전을 만들 수 없습니다. 이것이 컴파일러 또는 프로그램 문제인지 여부를 모르겠습니까?

저는 C++을 배우려고하는데 이것은 매우 짜증납니다. 우리 선생님은 같은 소프트웨어를 수업 중에 사용하고 있지만 리눅스에 완벽하게 작동합니다.

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

[EDITED] #pragma 추가됨 – Rama

0

라마 (Rama)가 말했듯이, 귀하는 귀하의 코드 블록에서 수사를 가능하게했을 수도 있습니다. "프로젝트"-> "빌드 옵션"-> "컴파일러 설정"탭 -> "기타 옵션" 및 delete -fpermissive로 이동하십시오.