• =?UTF-8?Q?warning:_implicit_declaration_of_function_=e2=80=98mkstem?= =

    From Philipp Klaus Krause@21:1/5 to All on Thu Aug 3 11:51:40 2017
    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.

    Philipp

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Jens Thoms Toerring@21:1/5 to Philipp Klaus Krause on Sat Aug 5 15:11:56 2017
    Philipp Klaus Krause <pkk@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.

    BTW, if you always want the newest version of the man pages
    you can get them easily via git from

    git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git

    Best regards, Jens
    --
    \ Jens Thoms Toerring ___ jt@toerring.de
    \__________________________ http://toerring.de

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Geoff Clare@21:1/5 to Jens Thoms Toerring on Mon Aug 7 13:47:00 2017
    Jens Thoms Toerring wrote:

    Philipp Klaus Krause <pkk@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 <netnews@gclare.org.uk>

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)