2014-06-19 2 views
1
int main() 
{ 
    int res; 
    funcAdd(10,20); 
} 

int funcAdd(int a,int b) 
{ 
    return a+b; 
} 

위의 프로그램에서 main은 funcAdd()가 main 뒤에 정의되고 처음에는 선언이 없으므로 main이 funcAdd()를 인식하지 못합니다. C 컴파일러가 2 패스의 프로그램을 수행했다면 funcAdd() 함수가 두 번째 패스에서 정의된다는 것을 알기 때문에 이것은 문제가되지 않습니다. 이것은 C가 한 단계 컴파일러임을 의미합니까? 친절히 내 의심을 분명히합니다.c 컴파일러는 몇 패스를 수행합니까?

+0

프로그램의 타당성과 아무런 관련이 없습니다. –

+0

결과의 확인 오류. 한 번 통과 컴파일러가 호출 지점에서 funcAdd를 인식 할 수 없다는 것은 호출 지점에서 funcAdd를 인식하지 못하는 컴파일러가 원 패스임을 의미하지는 않습니다. –

답변

2

귀하의 이수사가 유효하지 않습니다. C 컴파일러는 원하는만큼의 패스를 생성 할 수 있지만 표준에서 그렇게하므로 여전히이 경우 오류를 반환해야합니다.

11

C 언어는 컴파일러에서 수행해야하는 패스 수를 지정하지 않습니다. 그러나, 함수가 사용되기 전에 선언되어야한다는 것을 지정합니다. 따라서 컴파일러의 통과 횟수에 관계없이 코드가 유효하지 않습니다.

관련 문제