C++ GCC-Wuninitialized not警告未初始化的结构 #包括 #包括 #包括 int main() { struct-tm; //memset(&tm,0,sizeof(struct-tm)); strtime(“2000年1月1日13:00:00”,%d%b%Y%H:%M:%S”,&tm); 时间t=mktime(&tm); std::cout

C++ GCC-Wuninitialized not警告未初始化的结构 #包括 #包括 #包括 int main() { struct-tm; //memset(&tm,0,sizeof(struct-tm)); strtime(“2000年1月1日13:00:00”,%d%b%Y%H:%M:%S”,&tm); 时间t=mktime(&tm); std::cout,c++,struct,initialization,gcc-warning,C++,Struct,Initialization,Gcc Warning,GCC无法在编译时查看strtime、mktime和ctime函数的已编译代码。您只需从调用点传递结构的地址,而不读取任何内容。另一方面,Valgrind执行您的程序并跟踪所有内存,并检查一个特定的内存块在写之前有一个读操作,因此可以告诉你 如果这些函数是在头中内联定义的,那么编译器就有可能内联它们,并将指针地址追溯到未初始化的结构。不过,我还没有测试过GCC在这方面有多好(或者说,一般的编译器)。GCC版本4.4.5(Debian 4.4.5-6) #include <ctime>

GCC无法在编译时查看
strtime
mktime
ctime
函数的已编译代码。您只需从调用点传递结构的地址,而不读取任何内容。另一方面,Valgrind执行您的程序并跟踪所有内存,并检查一个特定的内存块在写之前有一个读操作,因此可以告诉你

如果这些函数是在头中内联定义的,那么编译器就有可能内联它们,并将指针地址追溯到未初始化的结构。不过,我还没有测试过GCC在这方面有多好(或者说,一般的编译器)。

GCC版本4.4.5(Debian 4.4.5-6)
#include <ctime>
#include <iostream>
#include <cstring>
int main()
{

struct tm tm ;
//memset(&tm, 0, sizeof(struct tm));
strptime("1 Jan 2000 13:00:00", "%d %b %Y %H:%M:%S", &tm);
time_t t =mktime(&tm);
std::cout << ctime(&t);
return 0;
}