버그

2013-01-12 3 views
12

가능한 중복 :
A function-definition is not allowed here before ‘{’버그

내가, 내가 내 코드에서했던이 버그를 공유 할 수 중 하나를 싶습니다 찾기 어려운 사람들 :

#include <iostream> 

void StartNuclearWar() { 
    std::cout << "War in progress..." << std::endl; 
} 

int main() 
{ 
    int a = 0; 

    // Get activation codes from C:\codes\ 
    a = 1; 

    if(a == 0) { 
     StartNuclearWar(); 
    } 
} 

어디입니까?

+0

핵전쟁을보고 싶습니다! – StackedCrooked

+0

ㅎ. 전처리기만이 백 슬래시로 처리 된 것 같아요. – Ancurio

+1

@Ancurio 주석을 처리하는 전처리 기입니다 (스트림에서 지우는 것처럼). –

답변

10

버그가 주석에 있습니다. 우리에게 최종 \ 문자는 디렉토리를 나타내며 컴파일러에서는 다음 줄이 현재 줄의 일부임을 나타냅니다. 물론 모든 개발자는이 사실을 알고 있지만,이 경우에는이 세부 사항이 매우 잘 숨겨져 있습니다.

+0

이제는 정리가 잘되었습니다. +1. –

+1

Not even eventtify (엔진은 여기에 있습니다) 올바르게 처리 할 수 ​​있습니다. –

+3

컴파일러 경고에주의하면 이러한 버그를 검색하는 데 크게 도움이 될 수 있습니다. MSVC는'-Wcomment' ('-Wall')이 제공 될 때 디폴트로'gcc'라는 경고를 생성합니다. – Lol4t0

2

Nice gotcha, MSDN이 (가) line splicing입니다. 개행 문자 뒤에 백 슬래시 (\) 즉시 끝나는

모든 라인은 물리적 라인에서 논리적 라인을 형성하는 소스 파일에 다음 라인으로 연결된다. 비어 있지 않으면 소스 파일은 백 슬래시가 앞에없는 개행 문자로 끝나야합니다.

+0

미안하지만, 미성년자는 인용문이 의미가 없기 때문에 백 슬래시를 볼 수있게 편집합니다. –

+0

@Damien_The_Unbeliever 감사합니다 :) – Steve