LINUX.ORG.RU

GCC не видит некоторые константы из хедеров.

 


0

1
$ cat test.c
#include <float.h>
main()
{
    int x=FLT_DECIMAL_DIG;
}
$ gcc test.c
test.c: В функции «main»:
test.c:4:11: ошибка: «FLT_DECIMAL_DIG» undeclared (first use in this function)
test.c:4:11: замечание: each undeclared identifier is reported only once for each function it appears in

Файла float.h в /usr/include/ нет. Зато я его нашёл в /usr/lib/gcc/x86_64-linux-gnu/4.6/include/

Больше в моей системе такого файла нигде нет (искал locate-ом).

GCC ругается не на все константы из этого файла, например FLT_MANT_DIG и FLT_RADIX он спокойно принимает и даже выводит их значения.

Ещё заметил, что vim подсвечивает те константы, о которых gcc «знает», а те, на которые ругается, оставляет белыми. Возможно, он знает набор каких-то классических констант (времён ANSI C), а про новые и не слышал, бог с ним. Но GCC такое поведение непростительно!

Пробовал -std=c99, эффекта нет.


Ответ на: комментарий от anonymous

4.6.3

Но вообще занятно. Дело в том, что согласно хедеру, эти константы можно использовать уже начиная с C99.

Pershin
() автор топика
Ответ на: комментарий от Pershin

а если у strace спросить куда gcc ходит? может найдется лишний float.h?

anonymous
()
Ответ на: комментарий от Deleted

Да! Я же написал об этом в 1 посте, в самом конце.

$ gcc -std=c99 test.c
test.c:4:1: предупреждение: по умолчанию возвращаемый тип функции - «int» [по умолчанию включена]
test.c: В функции «main»:
test.c:6:11: ошибка: «FLT_DECIMAL_DIG» undeclared (first use in this function)
test.c:6:11: замечание: each undeclared identifier is reported only once for each function it appears in

Меня ещё вот что смутило. В файле float.h, с места, где начинаются специфичные для C99 константы (в т.ч. и ту, которую я использовал), есть строчка

#if defined (__STDC_VERSION__) && __STDC_VERSION__ > 199901L

Но ведь для C99 __STDC_VERSION__ в точности равно 199901L, разве нет? Судя по той же википедии.

Из-за этого что ли не проходит -std=c99? И уж не является ли это багом в хедере, не стоит ли там заменить > на >= ?

Pershin
() автор топика
Ответ на: комментарий от i-rinat
$ gcc -std=gnu99 test.c
test.c:2:1: предупреждение: по умолчанию возвращаемый тип функции - «int» [по умолчанию включена]
test.c: В функции «main»:
test.c:4:11: ошибка: «FLT_DECIMAL_DIG» undeclared (first use in this function)
test.c:4:11: замечание: each undeclared identifier is reported only once for each function it appears in
Pershin
() автор топика
Ответ на: комментарий от anonymous

Хм, похоже на правду. И таки в хедере есть строчка #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L именно с больше-или-равно. Просто немного выше, не заметил. Тщательнее надо читать:) Спасибо.

Pershin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.