C/C++声明和定义

原创 2018年04月15日 17:51:09

以下摘自C++ primer

声明和定义
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义
声明用于向程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过extern关键字声明变量而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern:
extern int i; //declares but dose not define i
int i; //declares and defines i

extern 声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次
只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化必须要有存储空间来进行初始化。如果声明有初始化式,那么它可以被当成是定义,即使声明标记为extern
extern double pi = 3.1416; //definition
虽然使用了extern,但这条语句还是定义了pi,分配并且初始化了存储空间。只有当extern声明位于函数外部时才可以含有初始化式。

因为已初始化的extern声明被当做是定义,所以该变量任何随后的定义都是错误的:
extern double pi = 3.1416; // definition
double pi; // error: redefinition of pi
同样,随后的含有初始化式的extern声明也是错误的:
extern double pi = 3.1416; // definition
extern double pi; // ok:declaration not definition
extern double pi = 3.1416; // error: redefinition of pi

在C++语言中,变量必须且仅能定义一次,而且在使用变量之前必须定义或声明变量。

C/C++笔试系列--默认参数在哪指定?函数声明还是定义?

  经典C++笔试题解析8--默认参数在哪指定?函数声明还是定义?  Sailor_forever sailing_9806@163.com 转载请注明http://blog.csdn.net/sai...
  • sailor_8318
  • sailor_8318
  • 2008-11-22 01:07:00
  • 9720

C/C++中使用static关键字定义或声明静态对象

在C/C++中使用static关键字来定义或声明静态对象,主要有以下的应用场景: (1)static修饰局部对象,使其成为静态局部对象 将一个函数中定义的变量声明为static对象,那么在函数被多次调...
  • wangjianno2
  • wangjianno2
  • 2016-10-04 00:27:33
  • 564

在C和C++下声明函数指针的方式

在C的规范下,声明一个函数指针的方式如下: //comm.h #ifndef COMM_H #define COMM_H void test_print(const char*); void(*co...
  • u013600225
  • u013600225
  • 2017-04-05 15:16:02
  • 928

C/C++头文件与变量的声明和定义

C/C++头文件与变量的声明和定义最近遇到了变量重复包含的问题,才发现自己有好多知识已经模糊了,真惭愧。首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一...
  • mountzf
  • mountzf
  • 2016-06-27 11:20:55
  • 6075

c/c++ struct的定义、声明、对齐方式

一、定义/声明方式 第一种:仅有结构体名,不定义/声明变量 struct MyStruct {      int i;      char a[10];      double b; }; 第二种...
  • qq_27565063
  • qq_27565063
  • 2017-03-02 15:17:14
  • 380

C/C++:enum-枚举量声明、定义和使用

C/C++enum-枚举量声明、定义和使用 众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照...
  • zhangjikuan
  • zhangjikuan
  • 2015-03-25 16:54:18
  • 3255

C/C++中类的声明和定义

1.类的声明和定义 以类Sales_item的定义来举例说明: //Sales_item.h文件 //类Sales_item的声明 class Sales_item { public: //类Sal...
  • wangjianno2
  • wangjianno2
  • 2016-10-04 01:42:04
  • 911

C/C++中的重复定义bug

C中的全局变量的使用标签(空格分隔):c/c++ 使用不当很容易出现重定义的bug可以重复声明,不可以重复定义   在.h头文件中,变量如果没有初始化就是声明;初始化了就是定义。所以很多代码里面,都...
  • hust_sheng
  • hust_sheng
  • 2016-03-07 21:20:07
  • 2085

C/C++ struct 结构体定义 用法详解

在C语言中,定义一个结构体类型要用typedef :typedef struct point { int x; int y; }Point;在声明变量的时候就可以:Point p1; ...
  • yanzhenbo1
  • yanzhenbo1
  • 2016-11-07 09:35:41
  • 7278

C++ 声明并实现一个复数类

/****************************************************************************************** complex....
  • ZhongQi0808
  • ZhongQi0808
  • 2015-04-30 11:21:09
  • 1493
收藏助手
不良信息举报
您举报文章:C/C++声明和定义
举报原因:
原因补充:

(最多只允许输入30个字)