strdup 또는 _strdup?
사용할 때strdup
Microsoft Visual C++ 에서는, 다음의 경고가 표시됩니다.
경고 C4996: 'strdup':이 항목의 POSIX 이름은 더 이상 사용되지 않습니다.대신 ISO C++ 준거명 _strdup을 사용합니다.자세한 내용은 온라인 도움말을 참조하십시오.
그런 것 같다_strdup
정답입니다.
하지만 사용할 때는_strdup
GCC(Fedora Linux OS)에서 컴파일러에 다음 오류가 표시됩니다.
오류: '_strdup'이 이 범위에서 선언되지 않았습니다.
GCC 및 Linux에서는 컴파일러에 다음 오류가 표시되지 않습니다.strdup
.
어느 쪽이 맞습니까?strdup
또는_strdup
?
주의: 다음을 포함합니다.<string.h>
내 코드로.
어떤 것이 올바른가요?
strdup
는 완전히 올바른 POSIX 함수입니다.그럼에도 불구하고, 이것은 표준에 속하지 않으며, ANSI C 표준은 이후 사용을 위해 일부(광범위한) 클래스의 함수 이름을 예약합니다.이 중에서
- str로 시작하는 함수 이름 및 소문자
그 때문에 MS의 직원들은 그 자리를 대체하기로 결정했다.strdup
와 함께_strdup
.
그냥 계속 쓰고 싶다strdup
C 위원회에서 정의하지 않을 것 같습니다.strdup
POSIX가 아닌 다른 곳으로.어느 하나#define strdup _strdup
경고음을 잠재울 수 있습니다.
그나저나 나는 이것이 다음과 같은 이름을 가진 당신의 기능에 적용되는 것을 보길 바란다.string_list
기타도 마찬가지입니다.
#define _CRT_NONSTDC_NO_DEPRECATE를 정의하여 이 경고를 디세블로 할 수 있습니다.
strdup
는 표준 C++ 함수가 아닙니다.Posix 함수인 것 같고, 어쨌든 K&R C부터 있었던 잘 알려진 함수이기 때문에 꼭 사용해야 한다면 이름 충돌에 대해 걱정하지 말고 그냥 쓰세요.strdup
최대 휴대성을 실현합니다.
경고 메시지를 피하고 싶은 경우:
프로젝트 -> 속성 -> C/C++ -> 프리프로세서 -> 프리프로세서 정의
이것을 편집하여 추가하다
_CRT_NONSTDC_NO_DECRECATE
strdup은 POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html
_strdup은 Windows 고유:
http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.80).aspx
UNIX 에서는 strdup 을 사용합니다.Windows 에서는 _strdup 을 사용합니다.그렇게 간단하다.Unix 와 Windows 사이에 휴대용 코드를 쓸 필요가 있는 경우:
- 시스템 의존 매크로(예를 들어 _WIN32 vs. _POSIX_VERSION)를 사용하여 적절한 기능을 선택합니다(단, 매크로가 기존의 특정 포함 파일에 의존할 수 있습니다).
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html
http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx
strdup을 다시 구현하려면 strlen, malloc 및 memmove의 표준 함수를 사용합니다.
glib와 같은 크로스 플랫폼 유틸리티 라이브러리를 사용합니다.
http://developer.gnome.org/glib/2.28/glib-String-Utility-Functions.html#g-strdup
Visual C++ 메시지는 _strdup이 C++ 표준에 속하지만 C++ 표준에서 확인할 수 있으므로 이는 거짓임을 나타냅니다.함수의 「네임스페이스」로서 밑줄 프리픽스를 사용할 뿐입니다.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf
이는 경고가 아니라 vs.의 상위 버전에서 보고된 오류입니다.
를 사용#ifdef WIN32
C++는 몰라요.
C 표준에서는 다음과 같은 기능을 설명하지 않습니다.strdup
).name(이름은 예약되어 있습니다)., C, C, C로 대체하는 것이 .malloc
,strcpy
, , , , 입니다.free
.
언급URL : https://stackoverflow.com/questions/7582394/strdup-or-strdup
'programing' 카테고리의 다른 글
해시맵의 get/put 복잡성 (0) | 2022.08.13 |
---|---|
C와 C++ 컴파일 비호환성 - 유형 이름 지정 안 함 (0) | 2022.08.13 |
Vue Router 2는 해시 대신 해시방을 사용합니다. (0) | 2022.08.13 |
하위 Vue 프로젝트를 상위 Vue 프로젝트에 포함시키고 상위 Vue 스토어에 액세스합니다. (0) | 2022.08.13 |
VueJS 아키텍처에 관한 고려사항 프로젝트:Vuex 구현 (0) | 2022.08.13 |