Sé que es un Macro que estamos pasando a una función. ¿Cómo explicas cuál es el uso de esta macro y en qué escenario debo usar esto?explicación de D_GNU_SOURCE ¿Por qué usarlo y cuándo?
Respuesta
Mientras que las aplicaciones desarrolladas conforme a POSIX.1 - (IEEE 1.003,1-2.008, ISO/IEC 9945: 2009) y/o Single Unix Specification 2008 (ISO/IEC 9945: 2009 con X Maldiciones/abrir) ayudar a asegurar cuán portátil es tu aplicación El _GNU_SOURCE
muy probablemente limitará el uso del código fuente a los sistemas GNU/Linux y GNU/Hurd, a menos que se realice un trabajo adicional para abordar la no portabilidad de dicha funcionalidad en otras plataformas.
Algunas empresas y contratos gubernamentales/militares pueden requerir ciertos estándares de plataforma para ser utilizados.
Si está desarrollando una aplicación de código abierto/software libre que desea que esté disponible en múltiples sistemas Unix y Unix (incluidos Microsoft Windows NT, 2000 y posteriores que tengan compatibilidad POSIX disponible), entonces limite su desarrollo a las funciones de la biblioteca POSIX.1 hace que esta sea una tarea más fácil. Otros objetivos incluyen las plataformas BSD libres/abiertas NetBSD, FreeBSD, OpenBSD, DragonflyBSD, así como los sistemas comerciales Unix (Solaris, AIX, HP/UX, etc.) que no incluyen la funcionalidad _GNU_SOURCE
.
Si utiliza una funcionalidad alterada de una función portátil, no puedo pensar en un ejemplo, pero creo que existen, puede crear errores sutiles en plataformas que no sean de GNU.
En general, si su desarrollo ya está bloqueado en GNU/Linux y GNU/Hurd, puede usar tales extensiones, pero evite esos usos para cualquier aplicación que pueda implementarse en otros sistemas operativos tipo Unix y Unix .
Trabajo en una base de código grande que ha sido portada de otras dos plataformas Unix a Linux, y usamos extensiones _GNU_SOURCE
con moderación, aunque la mayor parte del desarrollo está limitado a POSIX o IEEE 1003.1/Single Unix moderno Estándares Spec y C99 (Biblioteca estándar C) para compatibilidad futura.
_GNU_SOURCE
habilita las extensiones de GNU a los estándares C y OS compatibles con la biblioteca GNU C, como asprintf
. Defínalo cuando uses tales funciones y macros no estándares.
¿Cuál es la desventaja de usar dicho estándar? No es portátil en la plataforma? – Whoami
@Whoami: no portabilidad, de hecho. Las páginas de manual de la biblioteca C documentan a qué funcionalidad de estándares se adhiere. –
Gracias por la respuesta.Entre, probé el siguiente código: #include
Algunas funciones no exigidas por el estándar se proporcionan en las bibliotecas, pero solo están disponibles cuando se define alguna macro de prueba de características. _GNU_SOURCE
es una de las macros que hace que tales funciones estén disponibles.
De glibc
Manual:
Macro: _GNU_SOURCE
Si define esta macro, todo está incluido: ISO C89, C99 ISO, POSIX.1, POSIX.2, BSD, SVID , Extensiones X/Open, LFS y GNU. En los casos en que POSIX.1 entra en conflicto con BSD, las definiciones POSIX tienen prioridad.
http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
- 1. ¿Cuándo usar == y cuándo usarlo?
- 2. ¿Qué es Request.InputStream y cuándo usarlo?
- 3. ¿Qué es ICustomTypeDescriptor y cuándo usarlo?
- 4. ¿Qué es __declspec y cuándo debo usarlo?
- 5. ¿Para qué es <spring:bind>? ¿Cuándo usarlo y cuándo no usarlo?
- 6. ¿Qué es .inc y por qué usarlo?
- 7. CompositeWPF: EventAggregator: ¿cuándo usarlo?
- 8. ¿Qué es un simulacro y cuándo deberías usarlo?
- 9. ¿Qué es un MQ y por qué quiero usarlo?
- 10. ¿Qué es un MvcHtmlString y cuándo debería usarlo?
- 11. @ModelAttribute anotación, ¿cuándo usarlo?
- 12. ¿Qué es la delegación? ¿Cuándo querría usarlo?
- 13. ¿Para qué sirve XML y cuándo debería usarlo?
- 14. ¿Qué es el bean scope y cuándo usarlo?
- 15. ¿Para qué sirve AppDelegate y cómo sé cuándo usarlo?
- 16. ¿Qué es un ÍNDICE ESPACIAL y cuándo debería usarlo?
- 17. ¿Qué significa "sin firmar" en MySQL y cuándo usarlo?
- 18. python y ruby: ¿para qué usarlo?
- 19. Google App Engine: cuándo usarlo, cuándo no?
- 20. ¿Qué es JAXB y por qué debería usarlo?
- 21. Qué hace asm ("pause") y por qué usarlo
- 22. ¿Qué es NHibernate y por qué debería usarlo?
- 23. ¿Qué es PDO y por qué debería usarlo?
- 24. ¿Cuándo desechar y por qué?
- 25. ¿Qué significa "solo exposición"? ¿Por qué usarlo?
- 26. compuesto_de en Rieles: ¿cuándo usarlo?
- 27. include() ¿Por qué no debería usarlo?
- 28. Plantilla de hibernación de primavera ¿cuándo y por qué?
- 29. espectador de vista de lista de Android. cuándo usarlo, y cuándo no a
- 30. ¿Cuándo y por qué debería usar TStringBuilder?
Gracias por la respuesta. Entre, probé el siguiente código: #include int main (int argc, char ** argv) { char * p; asprintf (& p, "% s", "Bienvenida"); printf ("Cadena es% s", p); } gcc -o mysample mysample.c: puedo compilar y ejecutar el código. No he incluido ninguna parte _GNU_SOURCE en el código fuente, no utilicé macro mientras compilaba. Pero igual cómo está compilando? –
Whoami
La documentación de GCC, en [C Dialect Options] (http://goo.gl/z0Piy) enumera que 'gnu89'/'gnu90' está predeterminado (en la versión 4.6.2 y muchas otras versiones también). 'gcc -v' para verificar su versión, y' cpp -dM dev/null' para buscar encabezados predefinidos. _GNU_SOURCE no está definido, por lo que el manual de gcc explica extensiones que no entran en conflicto con los estándares ANSI/ISO están permitidas por defecto. '_GNU_SOURCE' también permitiría extensiones de GNU que modifiquen o entren en conflicto con los estándares ANSI/ISO. – mctylr
En cuanto a la "funcionalidad alterada de una función portátil": me interesó encontrar un ejemplo de funciones con diferentes declaraciones en distintas Macros de Prueba de Característica, y encontré una: [mmap se declara de manera diferente dependiendo del nivel de cumplimiento POSIX, al menos en Solaris ] (http://www.oracle.com/technetwork/articles/servers-storage-dev/standardheaderfiles-453865.html?printOnly=1). – hmijail