LINUX.ORG.RU

gcc: почему warning?


0

0

Есть такой код (не смотрите, пожалуйста, на его суть -- он просто для примера). Делаю из него .o файл следующим образом: 
  gcc -std=c99 -W -Wall -pedantic -c l.c 

gcc (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5)

В итоге получаю сообщение: warning: implicit declaration of function ‘localtime_r’

Очень хотелось бы узнать, что в этом коде вызывает warning и как его убрать? Спасибо.


P.S. Кстати, localtime_r() портабельна? Всмысле, она присутствует хотя бы в *BSD системах? Спасибо.

=== l.c ===
#include <time.h>

void do_nothing(void)
{
    time_t t;
    struct tm ct;


    t = time(NULL);
    localtime_r(&t, &ct);

    return;
}
=== l.c ===
anonymous

man-ы читать иногда полезно

The four functions asctime(), ctime(), gmtime() and localtime() <... skip ...> defined when _BSD_SOURCE was set before including <time.h>.

добавь -D_BSD_SOURCE к аргументам gcc и будет тебе счастье

ananas ★★★★★
()

> В итоге получаю сообщение: warning: implicit declaration of function &#8216;localtime_r&#8217;

> Очень хотелось бы узнать, что в этом коде вызывает warning и как его убрать? Спасибо.

в заголовочных файлах содержатся декларации. Декларации localtime_r там по какой-то причине нет, поэтому компилятор по умолчанию считает что это int localtime_r(...)

> > Очень хотелось бы узнать, что в этом коде вызывает warning и как его убрать? Спасибо.

я подозреваю -- нужно определить какую-то макроконстанту -- типа -DXOPEN_BLAHBLAHBLAH

> P.S. Кстати, localtime_r() портабельна? Всмысле, она присутствует хотя бы в *BSD системах? Спасибо.

из man localtime_r в нетбсд:

The ctime(), difftime(), asctime(), localtime(), gmtime() and mktime() functions conform to ANSI X3.159-1989 (``ANSI C89'') The ctime_r(), asctime_r(), localtime_r() and gmtime_r() functions conform to IEEE Std 1003.1c-1995 (``POSIX.1'').

dilmah ★★★★★
()
Ответ на: комментарий от ananas

> man-ы читать иногда полезно

Читал. И это про этот define тоже. Думал, что он относится исключительно к разделу про "The glibc version of struct tm has additional fields", а не к localtime_r().

Вопрос снят. Использование "-D_BSD_SOURCE" в аргументах к gcc решило проблему. Всем большое спасибо за помощь.

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