含义
声明(Declaration), 用于告诉编译器被声明的函数/变量的存在, 及它们的类型/调用格式信息, 以检查是否被正确调用. 声明不分配内存空间.
定义(Definition), 用于告诉编译器被声明的函数/变量的存在位置, 会分配内存空间.
变量/函数在被使用之前一定要被声明. 声明和定义可以同时进行.
可以有多个声明, 但只能有一个定义.
函数的声明与定义
函数的Declaration由函数的签名(函数名+参数列表)与return类型, 外加一个分号组成. 如:
void fn(int a);
定义则有函数实体:
void fn(int a)
{
printf("%d\n", a);
}
C与C++的声明有一个不同之处:
void fn();
不带参的声明在C里代表可以传入任何参数, 而在C++中则代表不传入任何参数.
例如下面这段代码:
#include <stdio.h>
void fn();
int main()
{
printf("Hello World!\n");
fn(1);
}
void fn(int a)
{
printf("%d\n", a);
}
在C语言中, 它可以通过编译并执行, 但在C++中则不行.
若函数第一次出现时就定义了函数体, 则代表声明与定义同时进行.
变量的声明与定义
大多同时进行. 也可以用关键字extern
来告诉编译器, 这仅仅是个声明:
int a; //声明与定义同时进行
extern int b; //只有声明, 定义不在此处.
其它语言中的类似语法
- Java中的
abstract
方法及interface
, 很纯粹的declaration. - Python中的
global
关键字与extern
作用类似.