-D_XOPEN_SOURCE의 기능 / 의미는 무엇입니까?
최근에이 인수 없이는 gcc가 컴파일 할 수없는 코드를 발견했습니다. gcc man 페이지를 확인했지만이 특정 옵션을 찾지 못했습니다. 을 찾았 XOPEN_SOURCE
지만 그 기능에 대한 설명이 거의 없었습니다.
누군가 자세히 설명해 주시겠습니까? 내가 알고 -D_XOPEN_SOURCE
다른 값 등으로 설정할 수 있습니다 400
, 600
그 할 일을 일을하지만?
당신이 할 때
#define _XOPEN_SOURCE <some number>
또는
cc -D_XOPEN_SOURCE=<some number>
X / Open 및 POSIX 표준에 정의 된 일부 추가 함수에 대한 정의를 포함하도록 컴파일러에 지시합니다.
이렇게하면 최신 UNIX / BSD / Linux 시스템에 존재하지만 Windows와 같은 다른 시스템에는 존재하지 않는 몇 가지 추가 기능이 제공됩니다.
숫자는 다른 버전의 표준을 나타냅니다.
호출하는 각 함수의 맨 페이지를 보면 필요한 것이 무엇인지 알 수 있습니다 (있는 경우).
예를 들어 다음과 man strdup
같이 말합니다.
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
즉, 다음 중 하나를 입력해야합니다.
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
#include
를 사용하려면 s 를 수행하기 전에 소스 파일의 맨 위에 있습니다 strdup
.
또는 당신은 넣을 수 있습니다
#define _GNU_SOURCE
대신 Solaris, FreeBSD, Mac OS X 등에서 컴파일되지 않을 수 있다는 단점과 함께 모든 기능을 활성화합니다.
#include
, 를 수행 #define
하거나 새 함수를 사용 하기 전에 각 매뉴얼 페이지를 확인하는 것이 좋습니다. #define
예를 들어 basename (3) 과 같이 옵션 및 옵션에 따라 동작이 변경되기도합니다 .
또한보십시오:
- Linux : -std = c99를 사용하는 gcc가 struct timespec을 모르는 것에 대해 불평합니다.
- glibc 기능 테스트 매크로
- The Compilation Environment-Open Group Base Specification issue 6 (일명 X / Open 6)
- POSIX-위키 백과
- 단일 UNIX 사양-Wikipedia
-D
전 처리기 변수를 정의하는 ac 컴파일러 옵션입니다. 이 경우 _XOPEN_SOURCE
.
이것은 실제로 컴파일러 자체의 동작에 영향을주지 않고 표준 c 라이브러리와 같은 일부 라이브러리의 동작 방식을 변경합니다. 이와 같은 몇 가지 옵션이 있습니다. 대부분의 경우 UNIX 특정 프로그래밍 인터페이스 또는 특정 라이브러리 공급 업체에 대한 표준 문서와 관련이 있습니다.
일부 표준 기능의 동작이나 심지어 그 시그니처도 표준간에 다를 수 있으므로 이들 중 하나를 정의해야하는 경우가 있습니다. 따라서 -D_XOPEN_SOURCE
호환 모드를 켜 려면 또는 이와 유사한 것을 사용해야 할 수 있습니다 .
이러한 플래그를 사용할 수있는 또 다른 방법은 C 라이브러리 구현에서 제공하는 확장을 전환하여 소스 코드가 특정 표준의 한계 내에서 유지되도록하는 것입니다. 이것은 코드가 가능한 한 많은 플랫폼에서 실행되도록하는 데 사용할 수있는 조치 중 하나입니다.
이것은 posix와 같은 주어진 규범의 정의에 속하는 헤더를 노출합니다. 그것이 속하는 실제 규범은 값으로 정의됩니다 (예를 들어 400 또는 600). 표준 / 값 바인딩에 대해서는이 참조 를 참조하십시오 .
For some unknown reason, Mac OS/X (XCode) requires 600 to define strdup(), even though it's in the 1995 specification. Mozilla and others have run into this...
참고URL : https://stackoverflow.com/questions/5378778/what-does-d-xopen-source-do-mean
'Programing' 카테고리의 다른 글
점을 구분 기호로 사용하여 문자열 분할 (0) | 2020.09.05 |
---|---|
Mac OS에서 Maven의 settings.xml은 어디에 있습니까? (0) | 2020.09.05 |
ASP.NET MVC 응용 프로그램에서보기 별 javascript 파일을 어디에 배치합니까? (0) | 2020.09.04 |
fmap이있을 때 Haskell에서지도의 요점은 무엇입니까? (0) | 2020.09.04 |
C ++ 11에서 난수 생성 : 생성 방법, 작동 원리 (0) | 2020.09.04 |