C/C++中的声明与定义

含义

声明(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作用类似.
posted @ 2016-12-24 15:26  宁静是一种习惯  阅读(280)  评论(0编辑  收藏  举报