Другие ответы предполагают _POSIX_C_SOURCE
в качестве разрешающего макроса. Это, безусловно, работает, но не обязательно включает все, что есть в спецификации Single Unix (SUS). Для этого вы должны установить _XOPEN_SOURCE
, что также автоматически устанавливает _POSIX_C_SOURCE
. У меня есть заголовок, который я называю "posixver.h"
, который содержит:
/*
** Include this file before including system headers. By default, with
** C99 support from the compiler, it requests POSIX 2001 support. With
** C89 support only, it requests POSIX 1997 support. Override the
** default behaviour by setting either _XOPEN_SOURCE or _POSIX_C_SOURCE.
*/
/* _XOPEN_SOURCE 700 is loosely equivalent to _POSIX_C_SOURCE 200809L */
/* _XOPEN_SOURCE 600 is loosely equivalent to _POSIX_C_SOURCE 200112L */
/* _XOPEN_SOURCE 500 is loosely equivalent to _POSIX_C_SOURCE 199506L */
#if !defined(_XOPEN_SOURCE) && !defined(_POSIX_C_SOURCE)
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600 /* SUS v3, POSIX 1003.1 2004 (POSIX 2001 + Corrigenda) */
#else
#define _XOPEN_SOURCE 500 /* SUS v2, POSIX 1003.1 1997 */
#endif /* __STDC_VERSION__ */
#endif /* !_XOPEN_SOURCE && !_POSIX_C_SOURCE */
Он настроен для систем, с которыми я работаю, но не все распознают значение 700. Если вы работаете на относительно современном Linux, я считаю, что вы можете использовать 700. Он находится в заголовке, поэтому мне нужно изменить только один файл, когда я хочу изменить правила.