zoukankan      html  css  js  c++  java
  • 【C++ 拾遗】extern 关键字

    Separate compilation

    • let us split our programs into several files, each of which can be compiled independently.

    • allows programs to be written in logical parts.

    Distinction between a declaration and a definition

    To support separate compilation, C++ distinguishes between declarations and definitions. A declaration makes a name known to the program. A definition creates the associated entity.

    A variable declaration specifies the type and name of a variable. A variable definition is a declaration. In addition to specifying the name and type, a definition also allocates storage and may provide the variable with an initial value.

    One Definition Rule

    Variables must be defined exactly once but can be declared many times.

    Where extern comes in

    When we separate a program into multiple files, we need a way to share code across those files. For example, code written in one file may need to use a variable defined in another file. A file that wants to use a name defined elsewhere includes a declaration for that name.

    To obtain a declaration that is not also a definition, we add the extern keyword and must not provide an explicit initializer:

    extern int i;    // declares but does not define i;
    int j; //    declares and defines j
    

    In this case, the extern signifies the the variable i is not local to this file and that its definition will occur elsewhere.

    Any declaration that includes an explicit initializer is a definition. We can provide an initializer on a variable defined as extern, but doing so overrides the extern. An extern that has an initializer is a definition.

    It is an error to provide an initializer on an extern inside a function.

    extern 的第二个用法

    To define a single instance of a const variable, we use the keyword extern on both its definition and declaration(s). In other words, to share a const object among multiple files, you must define the variable as extern.

    extern 的第三个用法

    explicit instantiation a.k.a. extern template

  • 相关阅读:
    实现SQL SERVER 下的PadLeft函数
    C#中String和string区别
    SQL经验分享(二)取得数据库中所有的表名、字段名以及字段属于哪个表
    JavaScript获取上传文件后缀名
    Url重写
    C#编程风格约定
    解决SharePoint 2003的爬网性能问题 之七
    [跨DB查询]查找SharePoint 2007中的Orphan Feature的SQL语句
    如何得到MOSS 2007的最近的100次爬网的信息
    解决SharePoint 2003的爬网性能问题 之八
  • 原文地址:https://www.cnblogs.com/Patt/p/10657830.html
Copyright © 2011-2022 走看看