함수 프로토 타입에 대해 언급하지 않은 경우 main에서 함수를 호출하고 main 뒤에 정의를 작성하면 오류가 발생합니다. main 앞에 함수 정의를 쓰고 프로토 타입을 작성하지 않으면 프로그램이 작동합니다 벌금. 그래서 내 질문에 우리가 main (프로토 타입을 쓰지 않고) 전에 함수 정의를 쓰면 함수 프로토 타입을 선언하지 않는 문제를 해결할 수 있는가? (즉, 컴파일러는 위에서 아래로 읽기 시작하고 여전히 함수 이름, 반환 유형, 매개 변수 등)함수 프로토 타입/정의
답변
이전 프로토 타입이없는 함수 정의는 함수 정의 직전에 프로토 타입 선언과 의미 상 동일합니다. 그래서 예, 안전합니다 : 함수를 사용하기 전에 프로토 타입없이 함수를 정의하면 정상적으로 작동합니다.
컴파일러는 해당 함수를 호출 할 때 함수 정의로 이동합니다. 함수 프로토 타입은 인수와 반환 형식 검사를 위해 참조됩니다. 그래서, 안전하게 함수 프로토 타입을 방출 할 수 있습니다 ...
예 (for C++)에서는 컴파일러가이를 수락합니다. 함수 컴파일러를 호출하기 전에 먼저 프로토 타입 또는 정의를 확인해야합니다. 또한 번역 단위 (cpp) 파일은 위에서 아래로 컴파일되므로
void foo();
void foo2() {
}
int main() {
foo();
foo2();
}
void foo() {
}
모두 정확합니다. main() 아래에 foo
을 정의하지 않고 foo()
프로토 타입을 제공하면 컴파일러는 여전히 코드를 허용하지만 링커는 오류를 발생시킵니다.
@ Marcin Jedrzejewski 우리가 void foo()를 프로토 타입으로 작성하고 main에서이 함수를 호출하고 main 아래 함수를 정의하지 않으면 컴파일러에서 foo()에 대한 정의되지 않은 참조를 제공합니까? – Rooney10
@ Rooney10 예. 실제로 오류를 발생시키는 링커가 있는데, 컴파일은 두 단계로 이루어져 있습니다. 먼저 모든 번역 단위가 컴파일되고 모든 결과 객체 파일이 링크됩니다. 컴파일러는 foo()를 정의한 곳을 인식하지 못하기 때문에 다른 번역 단위 (.cpp 파일)에서 정의 할 수 있습니다. – marcinj
- 1. 부모 함수 프로토 타입 내에 프로토 타입이있는 자바 스크립트 함수
- 2. 프로토 타입이없는 함수 선언
- 3. C 함수 프로토 타입
- 4. 펄에서 함수 프로토 타입
- 5. C에서 함수 프로토 타입보기
- 6. 함수 프로토 타입입니까?
- 7. 프로토 타입 함수 실행
- 8. 우리는이 함수 프로토 타입이
- 9. 함수 프로토 타입 선언
- 10. 함수 프로토 타입을 선언해야합니까?
- 11. 함수 프로토 타입 C
- 12. 함수 프로토 타입
- 13. 함수 프로토 타입 혼동
- 14. 함수 프로토 타입 확장하기
- 15. 함수 프로토 타입의 함수 선언 (도움이 필요함)
- 16. 루아의 함수 프로토 타입 설정
- 17. 프로토 타입 함수에서 함수 호출
- 18. C 함수 프로토 타입에 ')'예상
- 19. 생략 부호가있는 함수 프로토 타입
- 20. 자바에서 함수 지정으로 프로토 타이핑
- 21. 프로토 타입이없는 C 함수 호출
- 22. C++ 인라인 함수 프로토 타입
- 23. 함수 프로토 타입을 어디에 선언해야합니까?
- 24. 함수 프로토 타입에 오류가 표시됩니다.
- 25. Eclipse의 함수 프로토 타입 제안
- 26. 함수 프로토 타입이 존재하더라도 누락되었습니다.
- 27. 전화 프로토 타입 정의 함수
- 28. JS 프로토 타입 함수 'this'confusion
- 29. 커널 레벨 함수 프로토 타입과 사용자 레벨 함수 프로토 타입의 차이점
- 30. 생성자 함수 내의 프로토 타입에 속성 추가
함수 정의는 전에 선언되지 않은 경우 함수의 선언을 포함합니다. –
또한 C와 C++ 사이에서 이전에 선언되지 않은 함수가 다른 경우 어떻게됩니까? C와 C++에는 약간의 유사성이 있지만 실제로는 매우 다른 의미 론적 규칙을 가진 매우 다른 언어입니다. 앞으로 확실한 답을 원하면 언어 하나를 선택하십시오. –
나는 C와 C++이이 점에서 매우 다르다고 생각한다. 어떤 것을 사용하고 있거나 어떤 종류의 호환성을 목표로 지정해야합니다. –