声明与定义的都是作用于编译器
声明
比如:extern int a 声明一个变量。 extern “c++” 按照c++的方式编译
extern“c”按照c的方式编译 // 告诉函数是以什么方式编译的。
声明就是指给除了当前变量或者函数,或者类什么的名字,不给其中的内容,就是先告诉你有这样一个什么类型的变量或者函数,但是这个变量或者函数的具体信息却是不知道的。就好比跟你介绍一个人的时候,声明就是只告诉你这个人叫什么,但是缺不给你说这个人到底怎么样,他有哪些优点,缺点,喜好问题是什么的。也就是不给开辟空间。
定义是对声明的实现或者实例化。定义操作只能是一次的,如果你定义变量超过一次,连接器是不知道把引用和哪块内存连接,然后就会报 duplicated symbols这样的错误了。以上的symbols其实就是指定义后的变量名,也就是其标识的内存块。
首先用宏来举个例子。
例:
// #define 0(假)//1() 真 可以不用
#if MY(默认为假)
#define MAX 100
#else
#define MAX 10
#endif
void mmain()
{
int a=MAX
printf("%d\n",a)
}
定义“MY”若真输出100,若假则执行“#define MAX 10”S输出10
上面的这个例子是对 宏定义的一点点理解。
定义直接告诉你了所有的东西,这个变量是什么,这个函数是什么功能,这个类里面包含了什么东西。很具体的说明。
-
当然一般对于变量来说,我们不怎么区分声明或者定义之类的,一般没有人去说我要声明一个变量,然后定义这个变量什么的。要说都是直接说定义变量。
-
声明一般都是对函数或者类来说的,声明在前,定义在后