全局声明时间函数的初始值设定项元素不是常量
Initializer element is not constant for declaring time function globally
我的 C 程序的时间函数全局声明如下:
time_t t = time(NULL);
struct tm *tm = localtime(&t);
time(&rawtime);
void file_name()
{
sprintf(buffer,"data/log_%d.%d_%d:%d:%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
char *p = buffer;
for(;*p;++p)
{
if(*p == ' ')
*p = '_';
}
printf("%s",buffer);
}
}
void create_file()
{
file_name();
fptr = fopen(buffer,"w");
}
void read_data();
{
.
.
.
.
sprintf(buffer1,"_%d:%d:%d",tm->tm_hour,tm->tm_min,tm_sec);
fprintf(fptr,"%d.%d_%d:%d:%d,%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
close_file();
}
int main()
{
read_data();
.
.
return 0;
}
因为我想在另外两个函数中使用 tm
,比如一个是 filename();和另一个类似的函数 read_data();在打印月份、日期等的程序中。我想在全球范围内声明这些。但是当我编译程序时,它给出了一个错误,称为 initializer element is not constant at time_t t = time(NULL);
and struct tm *tm = localtime(&t);
任何人都可以帮助我提前感谢。
以下代码:
time_t t = time(NULL);
struct tm *tm = localtime(&t);
无效。在 C 中初始化全局变量时不能调用函数。初始化元素(例如 time(NULL)
中 t
)不是常量(编译器在编译时不知道它的值,ei.for time(NULL)
编译器在编译程序的时候不知道程序是什么时候运行。
另外你不能调用全局函数调用,你必须在某个函数中调用任何东西,代码:
time(&rawtime);
也无效。
您可以将这些变量声明为全局变量,并在main()中对其进行初始化。所有没有任何初始化的全局变量都用 0 或 NULL 初始化。示例:
time_t t;
struct tm *tm;
...
int main() {
// first things first - initialize global variables to a known state
t = time(NULL;
tm = localtime(&t);
time(&rawtime);
// other things to do
...
read_data();
...
}
我的 C 程序的时间函数全局声明如下:
time_t t = time(NULL);
struct tm *tm = localtime(&t);
time(&rawtime);
void file_name()
{
sprintf(buffer,"data/log_%d.%d_%d:%d:%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
char *p = buffer;
for(;*p;++p)
{
if(*p == ' ')
*p = '_';
}
printf("%s",buffer);
}
}
void create_file()
{
file_name();
fptr = fopen(buffer,"w");
}
void read_data();
{
.
.
.
.
sprintf(buffer1,"_%d:%d:%d",tm->tm_hour,tm->tm_min,tm_sec);
fprintf(fptr,"%d.%d_%d:%d:%d,%d",tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
close_file();
}
int main()
{
read_data();
.
.
return 0;
}
因为我想在另外两个函数中使用 tm
,比如一个是 filename();和另一个类似的函数 read_data();在打印月份、日期等的程序中。我想在全球范围内声明这些。但是当我编译程序时,它给出了一个错误,称为 initializer element is not constant at time_t t = time(NULL);
and struct tm *tm = localtime(&t);
任何人都可以帮助我提前感谢。
以下代码:
time_t t = time(NULL);
struct tm *tm = localtime(&t);
无效。在 C 中初始化全局变量时不能调用函数。初始化元素(例如 time(NULL)
中 t
)不是常量(编译器在编译时不知道它的值,ei.for time(NULL)
编译器在编译程序的时候不知道程序是什么时候运行。
另外你不能调用全局函数调用,你必须在某个函数中调用任何东西,代码:
time(&rawtime);
也无效。
您可以将这些变量声明为全局变量,并在main()中对其进行初始化。所有没有任何初始化的全局变量都用 0 或 NULL 初始化。示例:
time_t t;
struct tm *tm;
...
int main() {
// first things first - initialize global variables to a known state
t = time(NULL;
tm = localtime(&t);
time(&rawtime);
// other things to do
...
read_data();
...
}