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

问题描述 投票:0回答:2

键入

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);

谁能告诉我我的问题出在哪里?

c compiler-warnings strptime
2个回答
28
投票

我发现我需要定义

__USE_XOPEN
_GNU_SOURCE
才能让它快乐。


0
投票

Debian 提供的手册页说:

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

评论不应被忽视。事实上,通过运行

man 7 feature_test_macros
你会了解到:

为了有效,必须在包含任何头文件之前定义功能测试宏

所以只需将

#define
行移动到源文件的最顶部,它就可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.