zoukankan      html  css  js  c++  java
  • C语言头文件书写

    说一下C语言的存储类说明符:

    1.Auto       只在块内变量声明中被允许,表示变量具有本地生存期。

    2.Extern    出现在顶层或块的外部变量函数与变量声明中,表示声明的对象具有静态生存期,连接程序知道其名字。  

    3.Static    可以放在函数与变量声明中。在函数定义时, 其只用于指定函数名,而不将函数导出到连接程序。在函数声明中,表示其后面会有定义声明的函数,存储类为static。在数据声明中, 总是表示定义的声明不导出到连接程序。

     说明:C99中规定所有顶层的默认存储类标志符都是extern

     1.函数声明
        我们如何来区分哪个头文件中的函数声明在其对应的。c文件中有定义,而哪个又没有呢?这不是必须的,因为无论在哪个文件中定义,聪明的连接程序都会义无返顾的帮我们找到,并导出到连接程序,但我觉得他确实必要的。 因为我们需要知道这个函数的具体内容是什么,有什么功能, 有了新需求后我也许要修改他, 我需要在短时间内能找到这个函数的定义。
        那么我来介绍一下在C语言中一个人为的规范:在.h文件中声明的函数,如果在其对应的.c文件中有定义,那么我们在声明这个函数时,不使用extern修饰符, 如果反之,则必须显示使用extern修饰符。这样,在C语言的.h文件中,我们会看到两种类型的函数声明。 带extern的,还不带extern的, 简单明了,一个是引用外部函数,一个是自己声明并定义的函数。

    2.全局变量的声明与定义
        打开我们项目的一个.h文件我们发现除了函数外,还有其他的东西, 那就是全局变量。在大型项目中,对全局变量的使用不可避免。比如,在first.c中需要使用一个全局变量Gtest, 那么我们可以在first.h中,定义 TPYE Gtest。与对函数的使用类似, 在second.c中我们的开发人员发现他也需要使用这个全局变量,而且要与first.c中一样的那个, 如何处理? 我们可以仿照函数中的处理方法,在second.h中再次声明TPYE Gtest, 根据extern的用法,以及c语言中默认的存储类型,,在两个头文件中声明的TPYE Gtest,其实其存储类型都是extern,也就是说不必我们操心, 连接程序会帮助我们处理一切。但我们又如何区分全局变量哪个是定义声明,哪个是引用声明呢?

     一般在C语言中有如下几种模型来区:

    1.初始化语句模型
    顶层声明中,存在初始化语句是,表示这个声明是定义声明,其他声明是引用声明。C语言的所有文件之中,只能有一个定义声明。按照这个模型,我们可以在first.h中定义如下TPYE G_test=1;那么就确定在first中的是定义声明,在其他的所有声明都是引用声明。
    2.省略存储类型说明
    在这个模型中,所有引用声明要显示的包括存储类extern, 而每个外部变量的唯一定义声明中省略存储类说明符。 

     

  • 相关阅读:
    redis quick start
    Distributed processing
    DocFetcher 本机文件搜索工具
    ZeroTier One
    windows下搭建voip服务器
    在公司上wifi
    屏幕录制软件
    openresty vs golang vs nodejs
    DISC测试
    How to implement a windbg plugin
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3368991.html
Copyright © 2011-2022 走看看