특정 클래스의 함수에 대한 함수 프로토 타입을 포함하지 않는 C 코드를 사용하고 있습니다. 함수 프로토 타입을 사용하지 않을 경우 어떤 이점이 있습니까? 함수는 절대 서로를 호출하지 않으며 매개 변수를 갖지 않습니다. 코드가 많이 바뀌므로 편집 할 줄이 조금 밖에 없습니까?C에서 함수 프로토 타입을 사용하지 않을 경우 어떤 이점이 있습니까?
답변
함수 프로토 타입은 외부 함수 용입니다. 내 규칙은 main()을 제외한 모든 비 정적 함수가 프로토 타입을 얻는다는 것입니다. 나는 '-Wmissing-prototypes'GCC 옵션을 사용한다. 일반적으로 함수를 정적으로 선언하는 것을 잊어 버리는 경우에 발생합니다. 두 번째 방법은 함수 '외설하는 파라미터 불특정 다수를 취한다는 것을 의미하기 때문에
void function();
:
void function(void);
그리고하지 이러한 방법 :
도 C에서이 방법 함수를 선언 원하는대로 (ANSI C 이전과의 호환성을 위해).
"편집 할 줄이 너무 적습니까?"
이 경우 유일하게 "이점"이 있습니다. 평범한 게으름입니다.
내가 생각할 수있는 유일한 '이점'은 코드를 변경하는 것이 적습니다. 일반적으로 이것은 단지 '게으른'것입니다.
어떤 경우에도 단점이 더욱 중요합니다. 하나의 소스 파일에 모든 기능이 있어야합니다. 소스 파일에있는 함수의 순서는 이제 중요합니다. 또한 다른 사람들은 헤더 파일을 보거나/혼란스러워 할 것입니다. 모범 사례는 .c와 .h입니다.
아니오.
엄격한 ANSI C에서도 합법적인지 여부는 알 수 없습니다.
프로토 타입을 사용하지 않는 것은 합법적입니다. 선언되지 않은 함수를 사용하는 것은 합법적이지 않습니다. 모든 프로토 타입은 선언이지만 일부 선언은 프로토 타입이 아닙니다. variadic 함수에 대해서만 프로토 타입이 절대적으로 필수입니다. –
코드가 많이 바뀌므로 줄을 편집하는 횟수가 줄었습니까?
나는 그것이 이유라고 생각한다. 나는 다른 이유를 생각할 수 없다. 컴파일 스피드 변경 (실제적으로)도 실행 시간도 코드를 업데이트하기위한 시간도 아니다.
함수 프로토 타입에 적용 할 때 "코드 변경 사항이 많습니다"라고해도 코드가 잘못되었습니다. 인터페이스 (함수 서명)가 많이 변경되면 함수의 책임은 매우 명확하지 않습니다. 먼저 코드를 작성하기 시작한 후에 만 문제를 하위 응답으로 나누는 방법을 파악합니다.
내가 생각할 수있는 유일한 장점은 .c 또는 .h 파일의 프로토 타입 섹션에 함수의 첫 번째 줄을 복사하여 붙여 넣지 않아도된다는 점입니다.
다른 파일에서 참조되는 기능의 경우 프로토 타입을 가질 수밖에 없습니다.
파일 범위 (즉, 정적 함수)가있는 함수의 경우 블록의 모든 프로토 타입을 파일 맨 위에 두는 것이 유용합니다.그런 식으로 모든 정적 함수는 해당 파일의 다른 곳에서 호출 할 수 있습니다. 프로토 타입이 없으면 함수 A()는 B()가 코드에서 위에 선언 된 경우에만 함수 B()를 호출 할 수 있습니다.
또한 일부 컴파일러는 범위에 프로토 타입이없는 경우 매개 변수에 대해 안전하지 않은 가정을합니다.
또한 MISRA-C를 준수해야하는 코드를 작성하는 경우 모든 함수의 프로토 타입 범위가 필요합니다.
프로토 타입을 살펴봄으로써 매개 변수의 목적을 명확히하기 때문에 프로토 타입에 매개 변수 이름 (합법적 인 것)이 아닌 매개 변수 이름이 포함되도록하는 것이 좋습니다.
타이핑이 적기 때문에 RSI의 위험이 줄어 듭니다.
- 1. 함수 프로토 타입을 이와 같이 작성하는 방법이 있습니까?
- 2. 프로토 타입을 사용해야합니까?
- 3. Coldfusion : 프로토 타입을 만드시겠습니까?
- 4. String의 프로토 타입을 수정해야합니까?
- 5. 함수 클로저 내에서만 객체의 프로토 타입을 적용 할 수 있습니까?
- 6. 통합 테스트를 사용하지 않을 경우
- 7. CoreAnimation을 사용하지 않는 경우와 사용하지 않을 경우
- 8. 프로토 타입을 선택 반환
- 9. 프로토 타입을 사용하여 되돌리기
- 10. 함수 프로토 타입 선언
- 11. JS에서 프로토 타입을 어떻게 처리합니까?
- 12. AddThis의 프로토 타입을 작성하는 JQuery
- 13. 해체에서 간단한 ARM 함수 프로토 타입을 디코딩 할 수 없습니까?
- 14. C에서 함수 프로토 타입 및 배열로 작업
- 15. 함수 프로토 타입을 포팅하는 데 도움 - jquery 1.4
- 16. std iterator를 반환하는 함수 프로토 타입을 선언하는 방법은 무엇입니까?
- 17. 개체의 프로토 타입을 전환하는 중
- 18. jquery 마이그레이션 문제로 프로토 타입을
- 19. 프로토 타입을 사용한 오프셋 높이
- 20. 프로토 타입을 사용한 터치 스크롤
- 21. JQuery : AJAX 함수 호출 프로토 타입을 요소에 추가하십시오.
- 22. 많은 요소에 동일한 함수 추가 (js 프로토 타입을 사용 하시겠습니까?)
- 23. C#을 통해 Java에 어떤 이점이 있습니까?
- 24. Smarty를 Zend와 통합 할 때 어떤 이점이 있습니까?
- 25. MSBuild를 사용하면 어떤 이점이 있습니까?
- 26. sessionStorage를 사용하면 어떤 이점이 있습니까?
- 27. WCF를 사용하면 어떤 이점이 있습니까?
- 28. Subversion을 사용하면 어떤 이점이 있습니까?
- 29. C# 어떻게 대리인 프로토 타입을 인라인 할 수 있습니까?
- 30. 이 경우 bigint 대신 int를 사용하면 어떤 이점이 있습니까?
또한 .c 파일의 시작 부분에 정적 funcitons에 대한 프로토 타입을 사용합니다. 그렇게하지 않는 이유는 구현 순서에 대해 걱정할 필요가 없다는 것입니다. – gnud
저는 정적 함수에 프로토 타입을 사용 했었지만 대부분은 그렇게하지 않았다고 확신 해 왔습니다. 프로토 타입이있는 경우 두 위치에서 정보를 반복합니다. 인터페이스의 경우에는 필수적이지만 정적 함수를 사용하는 이유는 무엇입니까? –
@Chris : 일부 컴파일러는 범위에 프로토 타입이없는 경우 매개 변수에 대해 안전하지 않은 가정을하게됩니다. –