사람들이 사용하지 않으려는 deprecated 함수에 대한 링크 타임 오류를 생성하는 가장 좋은 방법은 사용되지 않는 함수가 라이브러리에 없는지 확인하는 것입니다. 그러면 'deprecated'이상의 한 단계가됩니다.
아마도 보조 라이브러리에 사용되지 않는 기능을 제공 할 수 있습니다. 주의를 기울이지 않는 사람들은 보조 도서관과 연결될 수 있지만 주류의 사람들은 보조 도서관을 사용하지 않으므로 그 기능을 사용하지 않을 것입니다. 그러나 여전히 '비추천'단계를 넘어서고 있습니다.
링크 타임 경고 받기는 까다 롭습니다. 분명히 GCC는 일부 기능 (mktemp()
그 외)을 위해 이것을 수행하며, gets()
을 사용하는 프로그램을 실행하면 GCC에 경고 메시지가 표시됩니다. 나는 그들이 그렇게하기 위해 무엇을하는지 모른다.
의견에 비추어 볼 때 링크 시간이나 실행 시간까지 기다리는 대신 컴파일 타임에 문제를 해결해야한다고 생각합니다.
GCC는 속성합니다 (GCC 4.4.1 수동으로) 포함
error ("message")
이 특성 함수 선언과 같은 함수 호출에 사용되는 경우가 죽은 코드를 통해 제거되지 제거 또는 기타 최적화를 수행하면 메시지가 포함될 오류 이 진단됩니다. 이것은 컴파일 시간에 유용합니다. 특히 __builtin_constant_p와 인라인 함수 과 함께 인라인 함수 인수를 검사하는 것이 extern char [(condition)]을 통해 불가능한 지 확인하는 데 유용합니다. 1 : -1]; 속임수. 함수 을 정의되지 않은 상태로두고 링크 실패를 호출 할 수는 있지만 인라인 함수가 있거나 디버깅 정보를 표시하지 않는 경우에도이 속성을 사용하면 문제가 더 일찍 진단되고 정확한 위치로 호출됩니다. 이 속성은 함수 선언에 사용되며, 이러한 함수를 호출 죽은 코드 제거 또는 다른 최적화를 통해 제거되지 인 경우
warning ("message")
는 메시지를 포함하는 경고 진단됩니다. 이 옵션은 특히 __builtin_constant_p 및 인라인 함수와 함께 컴파일 시간 검사에 유용합니다. .gnu에 메시지가있는 함수를 정의하는 것이 가능하지만.경고 * 섹션에서이 속성을 사용하면 인라인 함수가있는 경우 또는 디버깅 정보를 표시하지 않는 경우에도 문제가 먼저 진단되고 전화의 정확한 위치로 진단됩니다.
구성 프로그램이 오류를 무시하면 오류가 발생합니다. 즉, 함수를 사용하여 새 코드를 컴파일 할 수 없지만 기존 코드는 라이브러리에서 더 이상 사용되지 않는 함수를 계속 사용할 수 있습니다 (다시 컴파일해야 할 때까지).
에 해당되지 ttyslot()을 커밋하지만, 나는 오류를 발생시키는 것에 대한 동등한 것을 모른다. 유감스럽게도 솔루션이 최고이지만 ABI와 새로운 응용 프로그램의 연결에 대한 나의 요구를 충족시키지 못합니다. –
@R .. : 충분합니다. 설치되어있는 라이브러리 사본 하나를 원한다고 말하는 것이 공평합니다. 사전 컴파일 된 응용 프로그램 (비추천 인터페이스를 사용 중일 수 있음)을 계속 실행하려면 다음과 같이하십시오. 더 이상 사용되지 않는 인터페이스를 사용하여 새로 컴파일 된 앱을 연결하지 못하게 하시겠습니까? 그렇다면 설정 감지기가 비추천 함수를 찾아 낼 수 있다면 사람들이 일을 수정하여 현대적인 (비추천 API가 아닌) 인터페이스와 연결되게 할 계획을 어떻게 세우겠습니까? –
새로운 대체 인터페이스가 없습니다. 이러한 비추천 인터페이스를 사용하는 것은 해로울 뿐이며 올바른 동작은이 인터페이스를 전혀 사용하지 않는 것입니다.불행하게도 나는 그것을 사용하려고하는 깨진 소프트웨어에 대한 통제권을 가지고 있지 않으며, 유지 보수 자에게 새 버전을 고칠 수는 있지만, 사용자는 여전히 좋은 버전으로 오래된 버전을 컴파일하려고 할 수도 있습니다. –