声明与定义的区别

8月 31st, 2012
Visited 4776 times, 1 so far today
0

Comments

                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