-D_XOPEN_SOURCE?/ne demek?
Geçenlerde gcc bu arg olmadan derlemek olmaz bazı kod ile karşılaştı. Gcc man sayfasına baktım, ama bu belirli seçenek bulamadı. XOPEN_SOURCE, ama ne küçük bir açıklaması olduğunu buldum.
Birisi ayrıntılı miyiz? Ama o ne yapıyor?- D_XOPEN_SOURCE farklı değerlere ayarlanabilir, 400, 600, böyle biliyorum
Teşekkürler.
CEVAP
Ne zaman
#define _XOPEN_SOURCE <some number>
ya
cc -D_XOPEN_SOURCE=<some number>
derleyici X/Açık ve POSIX standartlarında tanımlanmış olan bazı ekstra fonksiyonları tanımları vardır söyler.
Bu en son UNIX/BSD/Linux sistemleri var, ama muhtemelen Windows gibi diğer sistemlerde olmayan bazı ekstra işlevsellik verecektir.
Sayıları standart farklı sürümleri bakın.
- 500 - X/Open 5, incorporating POSIX 1995
- 600 - X/Open 6, incorporating POSIX 2004
- 700 - X/Open 7, incorporating POSIX 2008
İhtiyacınız olan, (varsa) dediğiniz her işlev için man sayfasına bakarak anlayabilirsiniz.
Örneğin, man strdup
diyor ki:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Bunlardan bir tane koymak gerekir anlamına gelir:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
kaynağınızın üst yapmadan önce dosya #include
strdup
kullanmak isterseniz.
Ya da koyabilirsin
#define _GNU_SOURCE
tüm işlevler, Solaris, FreeBSD üzerinde derlemek zor olan bir dezavantajı vardır, Mac OS X, vb sağlayan var onun yerine.
İyi bir fikir için onay her adam sayfa önce böyle bir #include
, #define
veya kullanarak yeni bir fonksiyon, çünkü bazen onların davranış değişiklikleri bağlı olarak ne seçenekleri #define
ler var, örneğin ile basename(3).
Ayrıca Bkz:
Nasıl aynı anda birden çok istemci bir...
Satırı " nedir;#!//sh" bin, UN...
Bu yapı nedir `x = x || y;` demek?...
Laymans açısından, 'durağan'...
Bu gdb çıktısı ne demek?...