Cuando tu lo hagas
#define _XOPEN_SOURCE <some number>
o
cc -D_XOPEN_SOURCE=<some number>
le dice a su compilador que incluya definiciones para algunas funciones adicionales que están definidas en los estándares X / Open y POSIX.
Esto le brindará algunas funciones adicionales que existen en los sistemas UNIX / BSD / Linux más recientes, pero que probablemente no exista en otros sistemas como Windows.
Los números se refieren a diferentes versiones del estándar.
Puede saber cuál necesita (si corresponde) mirando la página de manual de cada función que llame.
Por ejemplo, man strdupdice:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
Lo que significa que debes poner uno de estos:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
en la parte superior de su archivo fuente antes de hacer cualquier #includes si desea usar strdup.
O podrías poner
#define _GNU_SOURCE
en su lugar, lo que habilita todas las funciones, con el inconveniente de que es posible que no se compile en Solaris, FreeBSD, Mac OS X, etc.
Es una buena idea revisar cada página de manual antes de hacer una #include, #defineo usar una nueva función, porque a veces su comportamiento cambia dependiendo de las opciones y correos electrónicos#define que tenga, por ejemplo, con basename (3) .
Ver también: