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时会出错。

  • 相关阅读:
    什么是高可用性(High Availability)?
    Programer's Tools
    dotnetcore 站点搭建实践
    Nginx使用总结
    小程序开发工具一直登陆不上,提示网络失败
    前端页面JS和CSS以及图片加载nginx报错:net::ERR_CONTENT_LENGTH_MISMATCH的解决与检查
    angualrjs添加ngTouch
    H5自定义金额键盘,改良后ios体验效果流畅
    js生成带有logo的二维码并保存成图片下载
    模仿input闪烁光标
  • 原文地址:https://www.cnblogs.com/XiaoXiaoShuai-/p/12008629.html
Copyright © 2011-2022 走看看