ОС Linux Debian Etch 4.0r0
Проблема: решил воспрользоваться функцией round, чтобы округлить результат до ближайшего целого числа.
man round выдал, что надо добавить #include <math.h>. Он у меня в файле был.
Но компилятор всё равно стал "ворчать":
$ make
gcc -Wall -O2 -c prog2.c
prog2.c: In function 'calcmsht':
prog2.c:162: warning: implicit declaration of function 'round'
prog2.c:162: warning: incompatible implicit declaration of built-in function 'round'
Почитал ещё раз man round -- увидел рекомендацию для трансляции: -std=c99
Добавил, но компилятор стал "ворчать" на функцию gmtime_r:
$ make
gcc -std=c99 -Wall -O2 -c prog2.c
prog2.c: In function 'OutSigList':
prog2.c:233: warning: implicit declaration of function 'gmtime_r'
Как мне странслировать программу, чтобы компиляция прошла без предупреждений.
Функция round и gntime_r (Как с ними транслировать?)
Модератор: Модераторы разделов
-
BlackStar
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: Функция round и gntime_r
По первому вопросу, функция round() находится в библиотеке libm, поэтому следует добавить ключ -l:
Код: Выделить всё
gcc -Wall -O2 -c prog2.c -lmLightLang Team
-
MiK13
- Сообщения: 1290
- ОС: Linux Debian
Re: Функция round и gntime_r
BlackStar писал(а): ↑22.09.2008 16:46По первому вопросу, функция round() находится в библиотеке libm, поэтому следует добавить ключ -l:
Код: Выделить всё
gcc -Wall -O2 -c prog2.c -lm
Файл prog2.c:
Код: Выделить всё
#include <math.h>
#include <stdio.h>
double x,y;
int n;
int main() {
for(x=-3;x<=3;x+=0.1) {
n=y=round(x);
printf(" %22.18f -> %4.1f -> %d\n",x,y,n);
}
return 0;
}Код: Выделить всё
mik13@mishak:~/Prog$ gcc -Wall -O2 -c prog2.c -lm
prog2.c: In function 'main':
prog2.c:9: warning: implicit declaration of function 'round'
prog2.c:9: warning: incompatible implicit declaration of built-in function 'round'
gcc: -lm: linker input file unused because linking not doneКлюч -lm не убрал, а только добавил ещё одно сообщение. Что, впрочем, естественно -- при указании -c ключ -l смысла не имеет.
Странно другое. Если вместо round использую roundf (тоже самое, тольео не double, а float), то ситуация аналогичная.
При обычной компиляции предупреждения о подразумеваемом объявлении функции roundf и его несовместимости остаются.
Если добавить при компиляции -std=c99, то эти предупреждения исчезают. Но если убрать их текста #include <math.h>, то они снова возникают.
При этом ни в одном файле в каталоге /usr/include Midnight Commander строки roundf у меня не находит.
А исполняемые файлы во всех трёх случаях получаются идентичными
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
-
MiK13
- Сообщения: 1290
- ОС: Linux Debian
Re: Функция round и gntime_r
Rootlexx писал(а): ↑22.09.2008 20:14MiK13
Добавьте в заголовок программы:
Код: Выделить всё
#define _XOPEN_SOURCE 600
Спасибо, помогло. Предупреждения перестали появляться и без -std=c99
А в каких случаях желательно определение именно _XOPEN_SOURCE 600, а не _GNU_SOURCE ?
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
-
MiK13
- Сообщения: 1290
- ОС: Linux Debian