standards.h: _ALL_SOURCE vs _XOPEN_SOURCE

 ( NevemTeve | 2017. szeptember 10., vasárnap - 18:23 )

Az együttműködés csodálatos jó dolog! Az 'fmemopen'-hez kell az _XOPEN_SOURCE>=700. Tehát beállítom az _XOPEN_SOURCE=700-at. Meg az _ALL_SOURCE-t.

Aztán mire kijön a cpp a <standards.h>-ból, az _XOPEN_SOURCE már csak 600. Az _ALL_SOURCE miatt.

Kérdés: hibázott-e valaki. Mármint rajtam kívül persze.

No ez a rendkívül tudományos tákolás született:

/* standards.h */

#ifndef _H_STANDARDS

/* ezt a file-t a /usr/local/include-be kellene installálni,
   lehetőleg nem felülírva vele semmit,
   a haszna az lenne, hogy az _XOPEN_SOURCE-t nem engedjük csökkenteni
 */

#if defined(_XOPEN_SOURCE) && _XOPEN_SOURCE==700
#define _RESTORE_XOPEN_SOURCE 700
#endif

#include_next <standards.h>

#if defined(_RESTORE_XOPEN_SOURCE)
#define _XOPEN_SOURCE _RESTORE_XOPEN_SOURCE
#endif

#endif /* _H_STANDARDS */

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Most épp az jutott eszembe erről, vajon mit szólna ehhez az ellentengernagy-asszony másképpen Amazing Grace?

Üdv,
Marci

Nekem ez warning nélkül lefordul:
#define _GNU_SOURCE
#include <stdio.h>

int main()
{
FILE *f;

f = fmemopen(NULL, 1024, "r");
if (f != NULL) fclose(f);
return 0;
}

De ha berakok egy _ALL_SOURCE #define-t a tetejére pluszban, akkor is lefordul.

És ez milyen AIX-verzió volt?

Hol írtad, hogy AIX? :D

GNU is not Unix.
Ne használj _GNU_SOURCE makrót, ha rendesen POSIX-kompatibilis akarsz lenni.

Ez az include_next szúrja a szemem. GNUizmus.

Ebben igazad van, simán lehetne #include "/usr/include/standards.h"