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
표준 C ++ 함수가 아닙니다. 그러나 그것은 분명히 Posix 함수이고, 어쨌든 K & R C 이후 거기에 있었던 잘 알려진 함수 입니다. 그래서 꼭 사용해야한다면 이름 충돌 가능성에 대해 걱정하지 말고 strdup
최대한의 이식성을 위해 작성하십시오 .
어느 것이 맞습니까?
strdup
완벽하게 정확한 POSIX 함수입니다. 그럼에도 불구하고 표준에 속하지 않으며 ANSI C 표준은 추가 사용을 위해 일부 (광범위한) 함수 이름 클래스를 예약합니다. 이 중
- str 과 소문자로 시작하는 함수 이름
따라서 MS의 사람은 교체하기로 결정 strdup
으로 _strdup
.
계속 사용하겠습니다 strdup
. C위원회가 strdup
POSIX 이외의 것을 정의 할 가능성은 거의 없습니다 . 하나 #define strdup _strdup
또는 경고를 침묵.
BTW 나는 이것이 같은 이름을 가진 함수에도 적용된다는 것을 알기를 바랍니다 string_list
.
_CRT_NONSTDC_NO_DEPRECATE 를 #define 하여이 경고를 비활성화 할 수 있습니다 .
경고 메시지를 피하려면 :
프로젝트-> 속성-> C / C ++-> 전 처리기-> 전 처리기 정의
이것을 편집하고 추가하십시오
_CRT_NONSTDC_NO_DEPRECATE
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 대 _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 ++ 표준에서 확인할 수 있으므로 false 입니다. 함수의 "네임 스페이스"로 밑줄 접두사를 사용합니다.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf
C ++에 대해 모릅니다.
C 표준 어떤 기능 설명이없는 strdup
(이름이 예약되어 있지만) 이름. 이식하기 위해서는 C malloc
에서 strcpy
,, 및으로 바꾸는 것이 좋습니다 free
.
경고는 아니지만 상위 버전에서보고 된 오류입니다.
매크로 #ifdef WIN32
를 사용 하여 전환
참조 URL : https://stackoverflow.com/questions/7582394/strdup-or-strdup
'programing' 카테고리의 다른 글
게임 개발을위한 D 프로그래밍 언어 (0) | 2021.01.14 |
---|---|
DBRef로 mongodb를 쿼리하는 방법 (0) | 2021.01.14 |
"1 개 선택"은 무엇을합니까? (0) | 2021.01.14 |
Django : 400 잘못된 요청 구문-이 메시지는 무엇을 의미합니까? (0) | 2021.01.14 |
파이썬에서 한 줄씩 긴 여러 줄 문자열을 읽는 방법 (0) | 2021.01.14 |