Saat kamu melakukan
#define _XOPEN_SOURCE <some number>
atau
cc -D_XOPEN_SOURCE=<some number>
ia memberitahu kompiler Anda untuk menyertakan definisi untuk beberapa fungsi tambahan yang didefinisikan dalam standar X / Open dan POSIX.
Ini akan memberi Anda beberapa fungsionalitas tambahan yang ada di sistem UNIX / BSD / Linux terbaru, tetapi mungkin tidak ada di sistem lain seperti Windows.
Angka-angka tersebut mengacu pada berbagai versi standar.
Anda dapat mengetahui mana yang Anda butuhkan (jika ada) dengan melihat halaman manual untuk setiap fungsi yang Anda panggil.
Misalnya, man strdup
kata:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Yang berarti Anda harus meletakkan salah satu dari ini:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
di bagian atas file sumber Anda sebelum melakukan apapun #include
jika Anda ingin menggunakan strdup
.
Atau Anda bisa meletakkan
#define _GNU_SOURCE
sebagai gantinya, yang mengaktifkan semua fungsionalitas, dengan sisi negatifnya mungkin tidak dapat dikompilasi di Solaris, FreeBSD, Mac OS X, dll.
Ini adalah ide yang baik untuk memeriksa setiap halaman manual sebelum melakukan #include
, #define
atau menggunakan fungsi baru, karena kadang-kadang perilaku mereka berubah tergantung pada apa pilihan dan #define
s Anda memiliki, misalnya dengan basename (3) .
Lihat juga: