【问题标题】:Initializer element is not constant for declaring time function globally初始化元素不是用于全局声明时间函数的常量
【发布时间】:2018-04-09 10:44:05
【问题描述】:

我的 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); 不是恒定的,任何人都可以帮助我提前谢谢。

【问题讨论】:

  • time_t t; int main(void) { t = time(NULL); }
  • 请提供minimal reproducible example。这不是一个有效的 C 程序。
  • 仍然不是 mcve,也不是有效的 C。请查看您的初学者教科书以了解语言基础知识。另请阅读How to Ask 并说明您认为需要这样做的原因。
  • C 标准规定 “具有静态或线程存储持续时间的对象的初始化程序中的所有表达式都应为常量表达式或字符串文字。” 您尝试使用初始化函数调用,这不是两个选项之一。所以没办法。
  • 我可以知道如何在主函数中初始化它们吗?

标签: c global-variables time.h


【解决方案1】:

以下代码:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2012-04-10
    相关资源
    最近更新 更多