explication de D_GNU_SOURCE Pourquoi l’utiliser et quand?

Je sais que c’est une macro que nous passons à une fonction. Comment expliquez-vous quelle est l’utilisation de cette macro et dans quel scénario je dois l’utiliser?

Alors que les applications développées conformément à POSIX.1 – (IEEE 1003.1-2008, ISO / IEC 9945: 2009) et / ou à Unix Unix 2008 (ISO / IEC 9945: 2009 avec X / Open Curses) consortingbuent à garantir la portabilité de votre application. Le _GNU_SOURCE très probablement l’utilisation du code source aux systèmes GNU / Linux et GNU / Hurd, à moins que des travaux supplémentaires ne soient effectués pour résoudre le problème de la non-portabilité de ces fonctionnalités sur d’autres plates-formes.

Certaines sociétés et les contrats gouvernementaux / militaires peuvent exiger l’utilisation de certaines normes de plate-forme.

Si vous développez une application Open Source / Free Software que vous souhaitez pouvoir utiliser sur plusieurs systèmes Unix et Unix (y compris Microsoft Windows NT, 2000 et versions ultérieures avec une compatibilité POSIX disponible), limitez ensuite votre développement à POSIX.1. Les fonctions de bibliothèque facilitent cette tâche. Les autres cibles incluent les plates-formes BSD libres / ouvertes NetBSD, FreeBSD, OpenBSD, DragonflyBSD, ainsi que les systèmes commerciaux Unix (Solaris, AIX, HP / UX, etc.) qui n’incluent pas les fonctionnalités _GNU_SOURCE .

Si vous utilisez une fonctionnalité modifiée d’une fonction portable, je ne peux pas penser à un exemple mais je crois qu’ils existent, cela peut créer des bogues subtils dans les plates-formes non GNU.

Donc, en général, si votre développement est déjà verrouillé sur GNU / Linux et GNU / Hurd, alors n’hésitez pas à utiliser ces extensions, mais évitez de telles utilisations pour toutes les applications pouvant être déployées sur d’autres systèmes d’exploitation Unix et Unix.

Je travaille sur une base de code de grande taille qui a été scope de Linux sur deux autres plates-formes Unix, et nous utilisons les extensions _GNU_SOURCE avec modération, bien que la plupart des développements soient limités à POSIX ou IEEE 1003.1 / Single Unix Spec et C99 ( Standard C Library) pour la compatibilité future.

_GNU_SOURCE active les extensions GNU des normes C et OS sockets en charge par la bibliothèque GNU C, telles que asprintf . Définissez-le lorsque vous utilisez des fonctions et des macros non standard.

A partir du manuel glibc :

Macro: _GNU_SOURCE

Si vous définissez cette macro, tout est inclus: extensions ISO C89, ISO C99, POSIX.1, POSIX.2, BSD, SVID, X / Open, LFS et GNU. Dans les cas où POSIX.1 entre en conflit avec BSD, les définitions POSIX sont prioritaires.

http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html

Certaines fonctions non obligatoires par la norme sont fournies dans les bibliothèques, mais ne sont disponibles que lorsqu’une macro de test de fonctionnalités est définie. _GNU_SOURCE est l’une des macros qui rendent ces fonctions disponibles.