Время функционирует в Мингве

0

Я пытаюсь реализовать код, указанный на этой странице

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx

Я использую mingw (gcc), чтобы скомпилировать это. Но следующие строки не могут быть скомпилированы. Я включил "time.h". Я искал, но не могу найти это _localtime31_s или его эквивалент в gcc.

error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
error = asctime_s(buffer, 32, &newtime);

Где функции времени здесь? Благодаря

  • 0
    Если это не код, выполняющийся в потоках, используйте localtime , однако это может быть «не реентерабельным».
  • 0
    И asctime(buffer, &newtime)
Показать ещё 2 комментария
Теги:
gcc
network-programming
mingw

2 ответа

1
Лучший ответ

Функции localtime_s и asctime_s являются расширениями для Microsoft, предоставляемыми (некоторыми версиями) библиотекой времени выполнения MS. Это обеспечивается файлами заголовков MS. Поскольку это авторские права MS и не разрешены для бесплатного распространения, mingw предоставляет свои собственные версии заголовков - и они, вероятно, не содержат этих расширений (они, конечно, не помогли, когда я использовал mingw на своей локальной машине - моя основная машина в эти дни работает Linux...).

Обратите внимание, что приведение значения времени к time32_t *, вероятно, является плохой идеей - это почти наверняка укусит вас, если вы когда-нибудь скомпилируете свой код с time_t, который не является 32-битным значением.

Функция localtime_r - это полустандартная версия, которая может использоваться вместо localtime_s (вам нужно обратить внимание на 32 против 64-битных значений времени). Вы также можете использовать localtime (помимо необходимости отключить MS, раздражающий "эта функция небезопасна, используйте вместо этого ..._s" - я НЕ ДЕЙСТВИТЕЛЬНО хочу преобразовать 100 использований strcpy в strcpy_s, которые отлично работают отлично, потому что он уже проверен в другом месте).

Аналогично существует asctime_r, который предоставляет повторную версию.

Вы могли бы, возможно, также добавить прототипы для этих функций в свой файл где-нибудь, я считаю, что, если вы компилируете для Windows, решите проблему:

Ссылка на документацию по функциям MS: localtime_s и asctime_s.

1

MinGW-w64 предоставляет возможность включения защищенных функций CRT. Обратите внимание, что есть проблемы совместимости с Windows XP, где msvcrt.dll не содержит этих функций, и ваше приложение не будет работать в этой среде.

Они стандартизированы в C11 Annex K, который является необязательным и может отсутствовать в C11-совместимых системах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню