zoukankan      html  css  js  c++  java
  • 头文件

    1、头文件用于声明而不是用于定义

    定义只可以出现一次,而声明可以出现多次。下列语句是一些定义,不应该放在头文件里:

    extern int ival = 10;

    double fica_rate;

    虽然ival声明为extern,但是它有初始化式,代表这条语句是一个定义。类似地,fica_rate的声明虽然没有初始化式,但也是一个定义,因为没有关键字extern。同一个程序中有两个以上文件含有上述任一个定义都会导致多重定义链接错误。

    因为头文件包含在多个原文件中,所以不应该含有变量或函数的定义。

    对于头文件不应该含有定义这一规则,有三个例外。头文件可以定义类、值在编译时就已知道的const对象和inline函数。这些实体可以在多个源文件中定义,只要每个源文件中的定义是相同的。在头文件中定义这些实体,是因为编译器需要它们的定义来产生代码。

    2、一些const对象定义在头文件中

    一般来说,常量表达式是编译器在编译时就能够计算出结果的表达式。

    const对象默认为定义它的文件的局部变量,所以把它们的定义放在头文件中是合法的。

    这种行为有一个很重要的含义:当我们在头文件中定义了const变量后,每个包含该头文件的源文件都有了自己的const变量,其名称和值都一样。

    当该const变量是用常量表达式初始化时,可以保证所有的变量都有相同的值。但是在实践中,大部分的编译器在编译时都会用相应的常量表达式来替换对这些const变量的使用。所以,在实践中不会有任何存储空间用于存储常量表达式初始化的const变量。

    如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。相反,和其他的变量一样,该const变量应该在一个源文件中定义并初始化。应在头文件中为它添加extern声明,以使其能被多个文件共享。

  • 相关阅读:
    Javascript中对文字编码的三个函数
    Web.config文件中关于Cookie安全性的考量和设置
    面试时被问到的问题
    JQuery中查找父元素,子元素,追加元素,插入元素和删除元素 及其他常用方法
    JQuery插件开发学习
    Umbraco image中使用Crop URL
    SQL中的row_number() over()解释
    GEO,IGSO,MEO,LEO
    计算机网络端口常识
    VMnet1和VMnet8 未识别的网络的解决方法
  • 原文地址:https://www.cnblogs.com/BeyondTechnology/p/1837908.html
Copyright © 2011-2022 走看看