Quando você faz
#define _XOPEN_SOURCE <some number>
ou
cc -D_XOPEN_SOURCE=<some number>
ele diz ao seu compilador para incluir definições para algumas funções extras que são definidas nos padrões X / Open e POSIX.
Isso lhe dará algumas funcionalidades extras que existem nos sistemas UNIX / BSD / Linux mais recentes, mas provavelmente não existe em outros sistemas como o Windows.
Os números referem-se a diferentes versões do padrão.
Você pode dizer qual você precisa (se houver) olhando a página do manual para cada função que você chamar.
Por exemplo, man strdup
diz:
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
strndup(), strdupa(), strndupa(): _GNU_SOURCE
O que significa que você deve colocar um destes:
#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700
na parte superior do seu arquivo de origem antes de fazer qualquer #include
s, se desejar usar strdup
.
Ou você poderia colocar
#define _GNU_SOURCE
em vez disso, o que ativa todas as funcionalidades, com a desvantagem de que pode não ser compilado no Solaris, FreeBSD, Mac OS X, etc.
É uma boa idéia verificar cada página de manual antes de fazer um #include
, #define
ou usar uma nova função, porque às vezes o comportamento deles muda dependendo das opções e opções que #define
você tem, por exemplo, com basename (3) .
Veja também: