我有一个时间日期字符串,希望将其转换为tm对象。谷歌告诉我POSIX标准(但不是C语言)包含一个称为strptime()的函数可以完成此工作。
手册上说它在中,并且我需要在包含文件之前包含#define _XOPEN_SOURCE。很容易理解。
但是,编译器仍然会发出隐式声明警告。我打开了/usr/include/time.h并找到了函数声明:
手册上说它在中,并且我需要在包含文件之前包含#define _XOPEN_SOURCE。很容易理解。
但是,编译器仍然会发出隐式声明警告。我打开了/usr/include/time.h并找到了函数声明:
# ifdef __USE_XOPEN
/* Parse S according to FORMAT and store binary time information in TP.
The return value is a pointer to the first unparsed character in S. */
extern char *strptime (const char *__restrict __s,
const char *__restrict __fmt, struct tm *__tp)
__THROW;
#endif
看起来我需要使用 #define _USE_XOPEN
。
但这也不管用。编译器仍然没有看到声明。
有什么想法吗?我正在使用一个相对较新的Linux版本(Mint),带有gcc 5.4.0。
gcc -std=c11 -Wall -c test-strptime.c
编译时出现错误,那么您可以尝试添加-ansi
参数将标准重置为 C90。GCC 5.4.0 应默认使用 C11(实际上是-std=gnu11
),除非您使用的构建中有人做了一些可怕的事情(这是不太可能的)。 - Jonathan Leffler#define _XOPEN_SOURCE 700
必须在第一个系统头文件之前(无论是被直接包含还是间接包含)。 - Jonathan Lefflerstrptime
并添加到您的项目中。 - M.M