键入
man strptime
表示此函数需要声明 _XOPEN_SOURCE 并包含 time.h 标头。我做到了。但是,当我尝试编译我的代码时,我得到:
./check.c:56: 警告:函数‘strptime’的隐式声明
看我的代码:
int lockExpired(const char *date, const char *format, time_t current) {
struct tm *tmp = malloc(sizeof(struct tm *));
time_t lt;
int et;
strptime(date, format, tmp);
lt = mktime(tmp);
et = difftime(current, lt);
if (et < 3600)
return -et;
return 1;
}
函数声明也是:
char *strptime(const char *s, const char *format, struct tm *tm);
谁能告诉我我的问题出在哪里?
我发现我需要定义
__USE_XOPEN
和 _GNU_SOURCE
才能让它快乐。
Debian 提供的手册页说:
#define _XOPEN_SOURCE /* See feature_test_macros(7) */
#include <time.h>
评论不应被忽视。事实上,通过运行
man 7 feature_test_macros
你会了解到:
为了有效,必须在包含任何头文件之前定义功能测试宏。
所以只需将
#define
行移动到源文件的最顶部,它就可以正常工作。