我在.c文件中有一个方法,它返回文件的修改时间。
int lastModifiedTime(char *filePath)
{
struct stat attrib;
stat(filePath, &attrib);
char datestring[256];
struct tm *tm = localtime(&attrib.st_mtime);
strftime(datestring, sizeof(datestring), "%s", tm);
return atoi(datestring);
}
但是我得到了这个编译警告,我该如何解决呢?
client/file_monitor.c:227:5: warning: ISO C does not support the '%s' gnu_strftime format [-Wformat=]
strftime(datestring, sizeof(datestring), "%s", tm);
^
答案 0 :(得分:1)
根据这个(以及你的错误): http://www.cplusplus.com/reference/ctime/strftime/
%s
不是受支持的格式选项。我不确定你使用%s
的是什么,但也许%S
正是你要找的。 p>
答案 1 :(得分:0)
这必须是更复杂和低效的写作方式之一:
int lastModifiedTime(const char *filePath)
{
struct stat attrib;
if (stat(filePath, &attrib) != 0)
return -1;
return attrib.st_mtime;
}
然而,要回答这个问题:
指定-pedantic
时会出现错误(即使显示所有其他严格警告,也不会出现错误):
$ gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -Werror -pedantic -c stt.c
stt.c: In function ‘lastModifiedTime’:
stt.c:14:5: error: ISO C does not support the ‘%s’ gnu_strftime format [-Werror=format=]
strftime(datestring, sizeof(datestring), "%s", tm);
^
cc1: all warnings being treated as errors
$
如上所述,通过省略-pedantic
,您可以避免该错误。假设需要-pedantic
,那么你似乎被软管了。我能得到的最近的是避免错误,但仍然收到警告:
$ gcc -O3 -g -std=c11 -Wall -Wextra -Werror -pedantic -Wno-error=format= -c stt.c
stt.c: In function ‘lastModifiedTime’:
stt.c:14:5: warning: ISO C does not support the ‘%s’ gnu_strftime format [-Wformat=]
strftime(datestring, sizeof(datestring), "%s", tm);
^
$
我可能缺乏想象力,但我无法抑制警告。我尝试过(在Ubuntu 14.04上使用GCC 4.8.2):
-Wnoformat
-Wno-format
-Wno-format=
-Wnoerror=format=
-Wnoformat=
但这些都没有被接受。