声明和定义

转载:https://www.cnblogs.com/HDK2016/p/10236702.html


声明(declaration):意味着告诉编译器关于变量名称、变量类型、变量大小、函数名称、结构名称、大小等等信息,并且在声明阶段不会给变量分配任何的内存。

定义(definition):定义就是在变量声明后,给它分配上内存。可以看成“定义 = 声明 + 内存分配”。

#include <iostream>
using namespace std;
int addtion(int a,int b);//声明
struct product{unsigned int weight;double price;};//声明

int main(){
cout << "addtion is " << addtion(6,8) << endl;
product apple,orange;//定义
return 0;
}
//定义
int addtion(int a,int b){
return a+b;
}

上面的案例中,

int addtion(int a,int b);
struct product{unsigned int weight;double price;};

上面是声明,它们只是告诉编译器有这个东西,并不会分配内存。

product apple,orange;
int addtion(int a,int b){return a+b;}

上面是定义,给他们会被分配内存。

声明和定义还有一种常见的,就是extern修饰的变量。当使用extern关键字修饰变量(未初始化),表示变量声明。当在另一个文件中,为extern关键字修饰的变量赋值时,表示变量定义。
例如:
header.h

#ifndef HEADER_H
#define HEADER_H
//定义global_x变量 ,在任何包含了该文件的文件中都可以使用global_x变量
int global_x = 20;

#endif

file.h

#include <iostream>
#include "header.h"

extern int global_x;//声明 global_x 变量

int main(){

std::cout << "global_x = " << global_x << std::endl;

return 0;
}

file.h文件声明了global_x变量,但是globar_x变量的定义是在header.h文件中。


函数声明

函数声明会告诉编译器函数名称及如何调用函数; 函数的实际主体可以单独定义。
函数声明包括以下几个部分:

return_type  function_name( parameter list );

针对上面定义的函数 max(),以下是函数声明:

int max(int num1, int num2);

在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:

int max(int, int);

当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

注意:

1.extern只是外部引用,不能用来定义。假如用extern定义的话,编译不会报错,链接时会出错,extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。

2.C/C++ 编译 cpp 文件是从上往下编译,所以 main 函数里面调用其他函数时:
(1)如果其他函数在 main 函数的下面,则要在 main 函数上面先声明这个函数
(2)或者把 main 函数放在最下面
这个不仅限于 main 函数,其他函数的调用都是如此。被调用的函数要在调用的函数之前声明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述:声明是将一个名称引入一个程序.定义提供了一个实体在程序中的唯一描述.声明在单个作用域内可以重复多次(类成员除...
    抓兔子的猫阅读 657评论 0 3
  • 几种语言的特性 汇编程序:将汇编语言源程序翻译成目标程序编译程序:将高级语言源程序翻译成目标程序解释程序:将高级语...
    囊萤映雪的萤阅读 2,997评论 1 5
  • 【转载】C&C++——C函数与C++函数相互调用问题 C C++相互调用 在项目中融合C和C++有时是不可避免的,...
    天之道天知道阅读 3,542评论 2 19
  • 变量的声明有两种情况: 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 2、另...
    月震阅读 2,520评论 0 0
  • 班里成绩出来了,儿子因为回家,明天我去领,三年级家长群里开始了各种讨论,谁的考的好,多少分,谁的差,我还没有看见我...
    大漠孤烟丁阅读 107评论 0 0