Initializer元素不是全局声明时间函数的常量

时间:2018-04-09 10:44:06

标签: c global-variables time.h

我的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();在打印月,日等的程序中我想在全球范围内声明这些。但是当我编译程序时,它会在time_t t = time(NULL);struct tm *tm = localtime(&t);给出一个名为initializer元素的错误,并且_remember_me任何人都可以提前帮助我。

1 个答案:

答案 0 :(得分:0)

以下代码:

time_t t = time(NULL);
struct tm *tm = localtime(&t);

无效。在C中初始化全局变量时,无法调用函数。初始化元素(例如time(NULL)中的t)不是常量(编译器在编译时不知道它的值,ei 。对于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();
   ...
}