문제

방금 최근에 IDE를 MSVC ++ 6에서 오는 MS Visual Studio 2005로 변경했으며 많은 감가 상각 경고를 받았습니다. 경고를 무시하기보다는 _S 등가로 변경하기 시작했습니다. 그러나 나는 이것이 Microsoft 전용 구현이라는 것을 알았습니다.

나는 그들이 표준의 일부가되기 위해 그들이 밀고 있던 곳을 읽었습니다. 그게?

이 _s 함수를 사용하는 것이 좋은 생각입니까? 아니면 다른 것을 사용해야합니까?

감사.

도움이 되었습니까?

해결책

그만큼 *_s() 함수는 C 표준의 일부가 아니지만 추가 될 것을 제안하는 '기술 보고서'가 추가 될 것을 제안합니다 (TR의 루틴이 Microsoft와 정확히 동일하거나 유사한 지 확실하지 않습니다).

TR 24731-1 : C 라이브러리에 대한 확장 파트 I : 바운드 체크 인터페이스 :

오래된 기능을 계속 사용하려면 매크로를 정의하여 감가 상각 경고를 조용히 유지할 수 있습니다. _CRT_SECURE_NO_WARNINGS (였다 _CRT_SECURE_NO_DEPRECATE 여전히 지원 될 수 있습니다).

다른 팁

IDE를 업그레이드하고 Microsoft 라이브러리를 업그레이드했습니다. Microsoft는 실제로 이러한 오래된 기능 중 일부를 취하기 시작할 것이라고 말했다. 앞으로 발전하고 있다면 최신 기능을 사용할 수 있다고 말합니다. 거꾸로 개발 중이거나 버전이 무엇인지 걱정하지 않는 경우 이전 기능을 사용하고 싶을 수도 있습니다.

Microsoft 플랫폼을 목표로하는 경우 반드시 사용하십시오. 그렇지 않은 경우에도 소프트웨어를 비 미생물 플랫폼으로 포트해야 할 때 항상 직접 구현할 수 있습니다.

최악의 경우는 몇 가지를 사용하게된다는 것입니다. #ifdefs 조건부 컴파일.

그들은 내가 말할 수있는 한 표준화로 간주되고 있습니다. 제안은입니다 TR 24731.

그것들을 사용하는 것이 좋은 생각인지에 관해서는 예라고 말할 것입니다. 나는 그들이 오류를 잡는 방식이별로 마음에 들지 않지만 당신이 당신의 자신의 핸들러를 제공 할 수 있다고 생각합니다. 크로스 플랫폼 호환성이 필요한 경우 두 가지 선택이 있습니다. 비 독사 플랫폼에서 매크로로 구현하거나 감가 상각 경고를 끄십시오.

대형 코드베이스를 통해 검토를 한 후에 나는 모든 프로그래머가 문자열 조작에 C 표준 라이브러리 기능을 올바르게 사용하는 것이 거의 불가능하다고 판단하므로 수정을 목표로하는 모든 것이 환영합니다.

표준 기능을 사용하고 Microsoft가 기본적으로 켜진 가학적인 경고를 비활성화하여 표준 구성 코드를 작성하지 못하게해야합니다. "_S 기능"이 단일 공급 업체의 발명품이며 다른 공급 업체가 구현 한 적이 없기 때문에 "_S 기능"이 표준 C에 추가 될 것이라고 의심합니다. (우리가 그것을하는 동안 모든 posix를 C 표준에 통합합시다 ...)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top