Я пытаюсь реализовать код, указанный на этой странице
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);
Где функции времени здесь? Благодаря
Функции 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
.
MinGW-w64 предоставляет возможность включения защищенных функций CRT. Обратите внимание, что есть проблемы совместимости с Windows XP, где msvcrt.dll не содержит этих функций, и ваше приложение не будет работать в этой среде.
Они стандартизированы в C11 Annex K, который является необязательным и может отсутствовать в C11-совместимых системах.
localtime
, однако это может быть «не реентерабельным».asctime(buffer, &newtime)