2 votes

_POSIX_ vs _POSIX_SOURCE vs _POSIX_C_SOURCE

(séparée de <a href="https://stackoverflow.com/q/48460942/1593077">cette question </a>)

Les 3 macros suivantes apparaissent dans de nombreux fichiers source C qui essaient de détecter/se fier à la disponibilité de POSIX fonctionnalité :

  • _POSIX_SOURCE
  • _POSIX_C_SOURCE
  • _POSIX_ (et _POSIX ?)

Dans la question en lien, il est expliqué que nous sommes censés définir _POSIX_C_SOURCE à la version POSIX sur laquelle nous voulons nous appuyer (bien que l'établissement de ce paramètre ne garantisse pas que la fonctionnalité sera réellement être disponible - cela dépend du compilateur/OS). De plus, bien que je puisse le définir comme le utilisateur il n'est pas clair quand autres le définissent eux-mêmes (par exemple, le compilateur ou le système de construction). Pour les deux autres, je ne sais ni quand je dois les définir ni quand les autres les définissent.

Alors, quelle est la différence de signification entre les trois macros ? Quand chacune d'entre elles devrait-elle être définie pour moi ? Et pourquoi/quand devrais-je choisir de définir l'une d'entre elles plutôt que les autres, le cas échéant ?

2voto

einpoklum Points 2893

Réponse très partielle (et avec les remerciements de @SomeProgrammerDude) :


En Référence POSIX nous dit que :

La norme POSIX.1-1990 spécifie une macro appelée _POSIX_SOURCE. Elle a été remplacée par _POSIX_C_SOURCE.

et en termes pratiques, le manuel de la bibliothèque GNU C dit à nous, par exemple :

L'état de _POSIX_SOURCE n'est pas pertinent si vous définissez la macro _POSIX_C_SOURCE à un nombre entier positif.

et il devrait probablement en être de même pour les autres implémentations de la bibliothèque standard C. Donc - n'utilisez jamais _POSIX_SOURCE vous-même, utilisez uniquement _POSIX_C_SOURCE (sauf si vous êtes sur de vieilles plateformes où le système d'exploitation et les bibliothèques n'ont pas été mis à jour depuis au moins 20 ans).


_POSIX_ y _POSIX est une macro spécifique à Microsoft-Visual-C(++). Je suis deviner vous le définissez pour que MSVC expose des fonctionnalités POSIX/POSIX-like. D'après ce fil de discussion qui ne fait pas autorité sur la liste de diffusion de MinGW, MSVC n'utilise plus _POSIX_ (et _POSIX ?) à partir de MSVC2013.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X