-D_DEFAULT_SOUR는 무엇을 합니까?
이전에 나는 다음으로부터 경고를 받고 있었습니다.gcc -std=c99
그거usleep()
은연중에 선언되었습니다.그러다 우연히 이 스택 오버플로우 게시물을 발견하고는-D_BSD_SOURCE
. 하지만 지금은gcc
라고 말해줍니다.-D_BSD_SOURCE
사용하지 않을 것입니다.-D_DEFAULT_SOURCE
대신.
#warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
왜가.-D_BSD_SOURCE
감가상각?왜가.-D_DEFAULT_SOURCE
대신 사용?그게 무슨 역할을 하죠?
구글 검색을 좀 해봤는데, 결과는 그냥 닫으려고 사용하는 사람들로 가득 차 있어요.gcc
위에. 왜 그 이유를 알 수가 없었습니다. -D_BSD_SOURCE
감가상각이 되었습니다. 다만 그렇습니다.
glibc 매뉴얼은 다음을 포함한 각 피쳐 테스트 매크로(FTM)를 설명합니다._DEFAULT_SOURCE
:
이 매크로를 정의하면 X/Open, LFS 및 GNU 확장과는 별개로 대부분의 기능이 포함됩니다. 이는 2008년판 POSIX의 기능뿐만 아니라 이를 제어하기 위한 별도의 기능 테스트 매크로 없이 특정 BSD 및 SVID 기능을 활성화하는 효과가 있습니다.다음과 같은 컴파일러 옵션을 사용하지 않고 자체적으로 매크로 정의
-ansi
아니면-std=c99
, 기능 테스트 매크로를 정의하지 않는 것과 동일한 효과가 있습니다. 다른 기능 테스트 매크로와 함께 정의하거나 다음과 같은 옵션이 있는 경우-ansi
를 사용하면 다른 옵션을 사용하지 않을 경우에도 해당 기능을 사용할 수 있습니다.
FTM에 관한 이 LWN.net 기사는 (다른 흥미로운 정보 중에서도) 다음과 같은 근거를 제공합니다.
원래 의도는 FTM을 사용하는 각각의 glibc 헤더 파일 내에서 오직 하나의
__USE_*
내부 매크로는 특정 정의의 노출을 관리해야 합니다.또한 매크로는 중첩된 상태에서 사용해서는 안 됩니다.#ifdef
훈령glibc 헤더 파일을 검사한 결과 현실은 의도와 거리가 멀다는 것을 알 수 있었습니다. 이 상황은 롤랜드 맥그래스가 사태를 의도된 상황으로 되돌리기 위해 대대적인 정리가 필요한 시점이라는 것을 암시했습니다.롤랜드는 작업이 단순화 될 수 있다고 생각했습니다._BSD_SOURCE
그리고._SVID_SOURCE
역사적으로 목적이 있었지만, 요즘은 더 이상 쓸모가 없습니다.그는 현대 소스 코드에 필요한 매크로는 공식 표준과 관련된 매크로뿐이라고 말했습니다._GNU_SOURCE
.Joseph Myers는 이 작업의 첫 번째 단계를 구현하기 위해 일련의 패치를 당연히 사용해야 했습니다.Roland에 의해 장려된 보수적인 접근은 그것의 가치 하락을 의미했습니다.
_BSD_SOURCE
그리고._SVID_SOURCE
FTM은 두 개의 glibc 버전에 걸쳐 수행됩니다.glibc전 2.19운 ftm했습니다를 했습니다._DEFAULT_SOURCE
이 하면 다른 때에도 이 매크로를 정의하면 다른 매크로의 명시적인 정의로 인해 기본 정의가 발생하지 않을 경우에도 기본 정의가 노출됩니다.전 glibc다라는 세 .cc -D_BSD_SOURCE -D_SVID_SOURCE -D_POSIX_C_SOURCE=200809C
그래서 만약 당신이 정의를 내릴 필요가 있다면_BSD_SOURCE
아니면_SVID_SOURCE
, 간단히 정의를 내리다_DEFAULT_SOURCE
= 않고 = 는 둘 다 정의되어 있으면 glibc전 = 2.18전 = 2.19다.
저는 리눅스를 넘어 glibc를 넘어서는 휴대성이 필요하고 #ifdef's를 싫어합니다. 그래서:
/* asprintf() does not appear on linux without this */
#define _GNU_SOURCE
/* gettimeofday() does not appear on linux without this. */
#define _BSD_SOURCE
/* modern glibc will complain about the above if it doesn't see this. */
#define _DEFAULT_SOURCE
언급URL : https://stackoverflow.com/questions/29201515/what-does-d-default-source-do
'sourcecode' 카테고리의 다른 글
Git에서 무시된 디렉터리의 하위 디렉터리 무시 (0) | 2023.09.25 |
---|---|
임시 폴더 단어 누락 업로드 누르기 (0) | 2023.09.25 |
E2E 모의 $httpBackend 실제로 통과되지 않음나를 위해 관통합니다. (0) | 2023.09.25 |
목록에서 범주 제외 - Wordpress (0) | 2023.09.25 |
자바스크립트 날짜 + 7일 (0) | 2023.09.25 |