최근에이 인수 없이는 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) 과 같이 옵션과 옵션에 따라 동작이 변경되기도합니다 .
또한보십시오:
답변
-D
전 처리기 변수를 정의하는 ac 컴파일러 옵션입니다. 이 경우 _XOPEN_SOURCE
.
이것은 실제로 컴파일러 자체의 동작에 영향을주지 않고 표준 c 라이브러리와 같은 일부 라이브러리의 동작 방식을 변경합니다. 이와 같은 몇 가지 옵션이 있습니다. 대부분의 경우 일부 UNIX 특정 프로그래밍 인터페이스 또는 일부 특정 라이브러리 공급 업체에 대한 표준 문서와 관련이 있습니다.
일부 표준 기능의 동작이나 심지어 그 시그니처도 표준간에 다를 수 있으므로 이들 중 하나를 정의해야하는 경우가 있습니다. 따라서 -D_XOPEN_SOURCE
호환 모드를 켜 려면 또는 이와 유사한 것을 사용해야 할 수 있습니다 .
이러한 플래그의 또 다른 가능한 사용법은 C 라이브러리 구현에서 제공하는 확장을 전환하여 소스 코드가 특정 표준의 한계 내에서 유지되도록하는 것입니다. 이것은 코드가 가능한 한 많은 플랫폼에서 실행되도록하는 데 사용할 수있는 조치 중 하나입니다.