声明与定义的区别

                C++中的声明与定义边界不是很清晰,那这两者之间到底有什么差别呢?

声明:   就是告诉编译器这个变量或函数在内存的某个位置已经定义(即分配了内存地址),向编译器做个自我介绍。如果要用就可以直接用,不需要说再来分配相应的内存。 变量或函数的声明用关键字extern来表明,但函数声明可以省略。原因在于函数的声明与定义边界非常的清晰,没有函数体的就是声明,有函数体的就是定义。


定义: 就是这个变量或函数在内存的某个位置还不曾存在,需要编译器来分配相应的内存存储。

难点:

但是有时候,一个定义也是一个声明,即int x;  如果编译器在内存中没有找到变量标识 x,则就会在声明的同时定义它。也就是说,如果之前其它文件中不存在变量x,则就定义它。注意此处没有关键字extern在变量x之前。如果有这个关键字,则此变量x必定是声明,而不是定义。

代码示例:

#include <iostream>
using namespace std;

extern int i;//声明一个变量,但不定义(即不分配内存)
extern double f(int);//声明一个函数,但不定义

int b;//声明并定义一个变量,分配内存
int i;//定义一个变量,前面的extern int i是声明,真正的定义在这里

double f(int x){//函数的定义
    return x + 0.1;//类型自动提升
}

int h(int x){//函数声明并定义
    return x + 2;
}

int main(){
    i = 1;
    cout<<"Call f() = "<<f(i)<<endl;
    b = 2;
    cout<<"Call h() = "<<h(b)<<endl;
}

执行结果:

Call f() = 1.1
Call h() = 4


转自个人技术网站


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值