Недавно я узнал об аналоге sprintf() - asprintf(), который мне понадобился, потому-что сам выделяет память под целевую строку (до этого я делал свой велик для этого smile.gif ).
В руководстве сказано, что он использует флаг _GNU_SOURCE. Однако эффекта от него было ноль - asprintf() undefined.
И только глянув прямо в stdio.h, я узнал, какой флаг используется на деле.
Вопрос - какой флаг новее? Что забыли обновить: документацию или stdio.h?
_GNU_SOURCE или __USE_GNU ?
Модератор: Модераторы разделов
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: _GNU_SOURCE или __USE_GNU ?
Надо полагать, что stdio.h включается где-то раньше, перед описанием _GNU_SOURCE.
-
- Администратор
- Сообщения: 5409
- ОС: Gentoo
Re: _GNU_SOURCE или __USE_GNU ?
_GNU_SOURCE нужно объявлять в самом начале программы. Вы, полагаю, объявили его уже после каких=то инклудов.
Или features.h. За обработку _GNU_SOURCE отвечает features.h, а stdio.h использует макросы, объявленные в features.h.
Или features.h. За обработку _GNU_SOURCE отвечает features.h, а stdio.h использует макросы, объявленные в features.h.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: _GNU_SOURCE или __USE_GNU ?
В "man asprintf" сказано:/dev/random писал(а): ↑17.10.2010 14:14Или features.h. За обработку _GNU_SOURCE отвечает features.h, а stdio.h использует макросы, объявленные в features.h.
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
-
- Сообщения: 180
- ОС: Gentoo / Calculate
Re: _GNU_SOURCE или __USE_GNU ?
_GNU_SOURCE нужно объявлять в самом начале программы. Вы, полагаю, объявили его уже после каких=то инклудов.
Это я понял из мануала. В том то и дело, что я так и делал.
Флага __USE_GNU нет.
Это я видел. Вы в stdio.h гляньте

Я вот и спрашиваю, что забыли обновить: доки или сам заголовок

Если что, у меня Ubuntu 10.04, версии пакетов libc6 - 2.11.1-0ubuntu7.2
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: _GNU_SOURCE или __USE_GNU ?
Меня, как пользователя libc, не должно столь сильно волновать, что написано в stdio.h. Офф. документация, пусть даже и устаревшая, важнее. Более того, я не должен завязываться на содержимое какой-то конкретной реализации stdio.h
Ничего не забыли.nick87720z писал(а): ↑17.10.2010 14:23Я вот и спрашиваю, что забыли обновить: доки или сам заголовок smile.gif
Значит - не так.
-
- Сообщения: 180
- ОС: Gentoo / Calculate
Re: _GNU_SOURCE или __USE_GNU ?
Действительно, извиняюсь. Наверное, у меня где-то очепятка. 

-
- Администратор
- Сообщения: 5409
- ОС: Gentoo
-
- Сообщения: 180
- ОС: Gentoo / Calculate
Re: _GNU_SOURCE или __USE_GNU ?
Все нормально features.h нигде не включен явно. Просто в самом проекте с непривычки можно запутаться во включениях - там еще используются glib, gdk и gtk. Сам я недавно присоединился к проекту, и нюансы и внутренности еще не все изучил. 
А __USE_GNU есть, но это, видимо внутренности (две префиксные черты против одной у _GNU_SOURCE)

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