Jens Thoms Toerring wrote:
> Philipp Klaus Krause <
p...@spth.de> wrote:
>> When using mkstemp() in my C source, I get the gcc warning:
>
>> warning: implicit declaration of function ‘mkstemp’
>
>> Why?
>> I use gcc 6.4.0 on a debian GNU/Linux system.
>> <stdlib.h> is included. I use other POSIX functions (such as
>> ftruncate() and open()) that are not part of ISO C in the same source
>> file, but get a warning for mkstemp() only.
>> I tried using -D_POSIX_C_SOURCE=200112L, but still get the warning.
>
> Try '-D_POSIX_C_SOURCE=200809' instead. That's what's required
> according to the up-to-date version of the man page (see
> <
http://man7.org/linux/man-pages/man3/mkstemp.3.html>), and it
> works for me. The (somewhat out-dated) man page on my system
> also claims that '_POSIX_C_SOURCE=200112L' would do the the
> trick, but it doesn't.
In SUSv3/POSIX.1-2001 the mkstemp() function was part of the XSI option.
Some UNIX/POSIX systems make XSI symbols visible with
_POSIX_C_SOURCE=200112 but some don't. To be sure of making it visible
you need _XOPEN_SOURCE=600 (instead of, or as well as, setting
_POSIX_C_SOURCE=200112).
In SUSv4/POSIX.1-2008 mkstemp() was made mandatory, which is why
_POSIX_C_SOURCE=200809 works (on up-to-date systems). Of course,
_XOPEN_SOURCE=700 would also work.
--
Geoff Clare <
net...@gclare.org.uk>