c - 对于全局声明时间函数来说,初始化元素不是常量

标签 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() 的函数;在打印月份、日期等的程序中。我想在全局范围内声明这些。但是当我编译程序时,它给出了一个错误,称为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 中初始化全局变量时不能调用函数。初始化元素(例如 ttime(NULL) 中)不是常量(编译器不知道它是编译时的值,即. 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 - 对于全局声明时间函数来说,初始化元素不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49731102/

相关文章:

c++ - 没有输入/输出的函数是过程吗?

c - 2 个 AVX-512 vector 元素的交错合并 - C 内在函数

java - 如何创建一个全局 FileInputStream 对象,该对象可以从我的项目中的其他类访问?

c++ - C++类中的静态全局变量

swift - swift中从外部函数调用值变量

c - 无法解析字段 tv_sec

c++ - c++ 时差函数是否计算夏令时?

c - C 中的打印、延迟和删除当前行

c - 有没有办法将 scanf 与 "if"和 "else"语句一起使用?

使用 -h 选项时 javac "no source files"