2
glibc가 GNU 확장 (POSIX에서 지정되지 않은 함수 및 MAP_ANONYMOUS
과 같은 표준 함수에 대한 추가 플래그/인수 매크로)을 노출하지만 POSIX와 GNU 정의가 충돌 할 때마다 POSIX 의미론을 선호하는 방법이 있습니까? 내가 <libgen.h>
헤더를 포함 basename()
의 구체적인 사례를 들어 등GNU 확장을 요구하지만 그렇지 않으면 POSIX 호환 기능을 요구합니까?
POSIX에는 없지만 보편적으로 존재하며 많은 프로그램을 작성하는 데 정말로 필요한 것들이 있습니다 ('MAP_ANONYMOUS'가 가장 좋은 예입니다). 그러나'_GNU_SOURCE'를 추가하면 GNU 사람들 (또는 Ulrich Drepper)이 표준보다 낫다고 결정하기 때문에 모든 종류의 함수가 중단 될 수 있음을 의미합니다. 아마도 중요한 모든 것을 얻을 수있는'_BSD_SOURCE'와 같은 다른 매크로가있을 것입니다. .. –
@R : 네,'_GNU_SOURCE'는 gcc의 기본 호출에 포함되지 않고'__USE_GNU'에 의해 보호되는 것들에만 필요합니다 - gcc의 기본 호출은'_BSD_SOURCE', _SVID_SOURCE','_POSIX_SOURCE','_POSIX_C_SOURCE = 200112L' 등이 있습니다. – caf
문제는 이식 가능한 프로그램이 "대부분 POSIX와 일부 추가 기능"인 기본 환경에 크게 의존 할 수 없다는 것입니다. 어떤 시스템에서는 디폴트가 끔찍하게 부적합하고'-D_POSIX_C_SOURCE = ... '가 실제로 필요하다. 또한 POSIX 2008/XOPEN 7을 원한다면 어떤 이유로 든 기본값에 있지 않습니다. –