使用strptime函数时编译器收到警告(C)

j13ufse2  于 2023-03-22  发布在  其他
关注(0)|答案(2)|浏览(363)

输入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);
谁能告诉我,我的问题从何而来?

r7s23pms

r7s23pms1#

我发现我需要定义__USE_XOPEN_GNU_SOURCE才能让它高兴。

anauzrmj

anauzrmj2#

Debian提供的手册页说:

#define _XOPEN_SOURCE /* See feature_test_macros(7) */
#include <time.h>

不应该忽略注解。实际上,通过运行man 7 feature_test_macros,您将了解到:
为了有效,必须在包含任何头文件 * 之前定义功能测试宏 *。
所以只要把#define这一行移到源文件的最顶部,它就可以正常工作了。

相关问题