zoukankan      html  css  js  c++  java
  • 对声明和定义的理解

      可以先看看这篇博客

      一个变量函数可以被声明无数次,但是却至多只能被定义一次,且在该变量或函数在使用时必须被定义一次。(若该函数/变量不被使用,则可以只声明不定义)

      一、判断一条语句是否为变量的声明:若变量前有extern关键字,则它为声明,若变量前没有extern关键字,则其为定义

    extern int i;    //声明i
    int i;            //定义i,但未对i进行初始化
    int i = 5;        //是一个定义,同时对i进行了初始化。

      总之:判断一条语句是否为声明的声明,关键是看该语句中是否包含extern关键字而非看该语句中是否包含”=”,”=”的作用是对变量进行初始化

      一个例外: extern int i = 5; 该语句是一个定义,这句话的作用是定义一个全局的int类型变量,变量名为i,i的初值为5。

      不能在函数体中使用该语句,会报错: error C2205: 'i': cannot initialize extern variables with block scope。只能在函数外部使用,作用与“int i = 5;“相同。所以”extern int i = 5“这条语句的价值不大。

      

      二、判断一条语句是否为函数声明若函数包含了实现体(即“{}),则其为函数定义,否则为函数声明

    void fun()        //函数定义
    {
    }
    
    void fun()    //函数声明

      声明一个函数或者变量实际上就是对编译器说:这个函数/变量是存在的。只有当使用这个变量/函数时,编译器才会去确认该变量/函数是否真正存在,如果发现该变量/函数实际并不存在,那么就会build失败。

      变量/函数是否真正存在取决于是否定义了这个变量/函数。

      若存在某头文件a.h,a.h中定义了变量i“int i;“;若同时有b.c和c.c都include a.h,则build该project时会出错,为何:因为实际上b.c和c.c都包含“int i;“这条语句,在分别compile b.c和c.c时,”int i;“这条语句被compile了两次,因此相当于变量i被定义了两次,因此在link时会出错。

  • 相关阅读:
    java int转byte数组
    业务网关-操作手册
    业务网关-配置
    H2数据库的导入、导出(CSV)
    sequelize踩坑处理:时间格式化
    引入koa-static处理静态资源
    MySql利用case when实现批量更新多条记录的不同值实现方法
    Sequelize增删改查及批量新增或批量更新(bulkCreate的updateOnDuplicate)等常用接口
    数据结构队列、双端队列、队列系算法题解析
    配置webpack中externals来减少打包后vendor.js的体积
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/12008629.html
Copyright © 2011-2022 走看看