_GNU_SOURCE или __USE_GNU ?

Модератор: Модераторы разделов

nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

_GNU_SOURCE или __USE_GNU ?

Сообщение nick87720z »

Недавно я узнал об аналоге sprintf() - asprintf(), который мне понадобился, потому-что сам выделяет память под целевую строку (до этого я делал свой велик для этого smile.gif ).
В руководстве сказано, что он использует флаг _GNU_SOURCE. Однако эффекта от него было ноль - asprintf() undefined.
И только глянув прямо в stdio.h, я узнал, какой флаг используется на деле.

Вопрос - какой флаг новее? Что забыли обновить: документацию или stdio.h?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение serzh-z »

Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение serzh-z »

nick87720z писал(а):
17.10.2010 14:00
Однако эффекта от него было ноль - asprintf() undefined.
Надо полагать, что stdio.h включается где-то раньше, перед описанием _GNU_SOURCE.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5410
ОС: Gentoo

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение /dev/random »

_GNU_SOURCE нужно объявлять в самом начале программы. Вы, полагаю, объявили его уже после каких=то инклудов.

serzh-z писал(а):
17.10.2010 14:12
Надо полагать, что stdio.h включается где-то раньше, перед описанием _GNU_SOURCE.

Или features.h. За обработку _GNU_SOURCE отвечает features.h, а stdio.h использует макросы, объявленные в features.h.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение serzh-z »

/dev/random писал(а):
17.10.2010 14:14
Или features.h. За обработку _GNU_SOURCE отвечает features.h, а stdio.h использует макросы, объявленные в features.h.
В "man asprintf" сказано:
QUOTE писал(а):#define _GNU_SOURCE
#include <stdio.h>


Это, вполне работает:

Код: Выделить всё

// a.c

#define _GNU_SOURCE

#include <stdio.h>

int main() {
        printf("A: %p\n", (void *) asprintf);
}
QUOTE писал(а):serzh@corix /tmp $ make a && ./a
cc a.c -o a
A: 0x400490
Спасибо сказали:
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение nick87720z »

_GNU_SOURCE нужно объявлять в самом начале программы. Вы, полагаю, объявили его уже после каких=то инклудов.

Это я понял из мануала. В том то и дело, что я так и делал.

Флага __USE_GNU нет.

Это я видел. Вы в stdio.h гляньте ;)
Я вот и спрашиваю, что забыли обновить: доки или сам заголовок :)

Если что, у меня Ubuntu 10.04, версии пакетов libc6 - 2.11.1-0ubuntu7.2
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение serzh-z »

nick87720z писал(а):
17.10.2010 14:23
Это я видел. Вы в stdio.h гляньте wink.gif
Меня, как пользователя libc, не должно столь сильно волновать, что написано в stdio.h. Офф. документация, пусть даже и устаревшая, важнее. Более того, я не должен завязываться на содержимое какой-то конкретной реализации stdio.h

nick87720z писал(а):
17.10.2010 14:23
Я вот и спрашиваю, что забыли обновить: доки или сам заголовок smile.gif
Ничего не забыли.

nick87720z писал(а):
17.10.2010 14:23
я так и делал.
Значит - не так.
Спасибо сказали:
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение nick87720z »

Действительно, извиняюсь. Наверное, у меня где-то очепятка. :wacko:
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5410
ОС: Gentoo

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение /dev/random »

serzh-z писал(а):
17.10.2010 14:20
Это, вполне работает:

stdio.h включает features.h. Но features.h может быть включён и каким-то другим файлом, и в этом случае объявлять _GNU_SOURCE будет уже поздно, хотя stdio.h ещё не включался, даже неявно.
Спасибо сказали:
nick87720z
Сообщения: 180
ОС: Gentoo / Calculate

Re: _GNU_SOURCE или __USE_GNU ?

Сообщение nick87720z »

Все нормально features.h нигде не включен явно. Просто в самом проекте с непривычки можно запутаться во включениях - там еще используются glib, gdk и gtk. Сам я недавно присоединился к проекту, и нюансы и внутренности еще не все изучил. :)

А __USE_GNU есть, но это, видимо внутренности (две префиксные черты против одной у _GNU_SOURCE)
Спасибо сказали: