声明变量FILE *(静态或非静态)

时间:2013-12-10 11:41:45

标签: c include scope

我的情况是这样的:

  • 标题aux_func.h,其中包含函数int check_format_file(FILE * file);
  • 的原型
  • 源文件aux_func.c,实现了该功能

问题是:在我的main.c中,在哪里以及如何更好地声明FILE * f

  1. 作为静态全局变量
  2.   

    #include aux_func.h

         

    静态文件* f;

    int main() 
     {
        check_format_file(f);  
      /* other stuffs */  
      return 0;  
     }
    
    1. 作为一个istance变量在main
    2. 中声明
      #include aux_func.h
      
      int main() 
       {
        FILE * f;
        check_format_file(f);  
        /* other stuffs */  
        return 0;  
       }
      

      我怀疑FILE *f的正确可见性。

2 个答案:

答案 0 :(得分:2)

在这两种情况下,您都将f传递给唯一的函数check_format_file(),因此无需将其设置为静态和全局。没有人会改变f的价值(我希望如此,因为如果有人要修改它,那么你有更多的担忧而不是这个)以及你将它传递给另一个函数的方式,确保它将对函数可见。

来自SO Question,

  

变量应始终具有较小的范围。争论   这背后的是,每当你增加范围,你就会有更多   可能修改变量的代码,因此更复杂   在溶液中诱导。

     

很明显,如果使用全局变量,则首选   设计和实现自然允许。由于这个我   除非确实需要,否则不要使用全局变量。

答案 1 :(得分:0)

我会选择第二个选项,因为您似乎不会使用此函数中的变量f,这就是为什么没有理由将其设为全局。