How to know to which value I should define _POSIX_C_SOURCE?

  • How do I know to which value I need _POSIX_C_SOURCE to be equal? I found multiple values online.

There is one value per POSIX standard definition. So you can use any value which:

  1. defines the functionality you need
  2. is supported by your hosting OS

Best is to use the lowest value that meet both those criteria.

  • Why does the placement of this definition influence the compilation?

POSIX says :

System Interface Chapter 2. Section 2 The Compilation Environment: A POSIX-conforming application should ensure that the feature test macro _POSIX_C_SOURCE is defined before inclusion of any header.

Otherwise it may leads to wrong/incompatible included definitions... Defining it before any include ensure that all is under the same POSIX version...

Recommended reading : The Open Group Base Specifications Issue 7, 2018 edition, 2 - General Information


The other answer gives nice background. But, it's also possible to define this at the compiler level so you don't have to put it in your source. With gcc and glibc at least, the command-line option

-D_POSIX_C_SOURCE=199309L

is enough to ensure that nanosleep and struct timespec are available if you include <time.h>.

Tags:

C

Posix