C语言深度剖析:定义与声明
一、铺垫
我敢于诸君打赌,定义与声明,诸君肯定都会,但是绝对说不清123;因为我在学校里学习的时候;也是不知其所以然;直到自己遇见了一位老师,看了《C语言深度剖析》这一本书;
二、阐述
我们在学习C语言或者C++时,都会听到一个概念,叫做“左值、右值”;在写程序时,会看到编译器报错:左值不能为0等等;(C++的移动构造,诸位看吧,一看一个不吱声;)
int x=10;
左值:指的是空间,指的是属性,无法随意更改的叫左值(等号左边 x)
右值:指的是内容(等号右边 10)
左值: x的空间
右值: x的内容
举例:
int x=10; 以例子来说明定义与声明
定义:告诉编译器,创建1个空间(分配一块内存),这个空间的名字叫做x,里面放了一个值叫10;且名字x是唯一的,只能有一个x;
extern int x;
声明:第一种含义:告诉编译器,我要使用一个变量,这个变量名字叫x;其他人不能使用这个变量名;当程序员,给他赋值时(x=10),才会开辟空间;
第二种含义:告诉编译器,这个名字已经匹配到一块内存上了,下面的代码用到变量或对象是在别的地方定义的。
以上的解释,如果诸君明白了,就会认为声明比定义的实际价值更大;因为声明有两种含义,而定义只有一种;想更清楚的理解:只能在Linux编程的环境变量、网络编程的调用URL(URI)的代码中理解;
其他人就会问,如何区分定义与声明呢?
答:使用extern关键字;来区分;
解释:由于现代编译器的强大,不使用extern关键字也是声明;所以导致了程序员不会特意区分声明与定义;间接导致extern关键字被砍了一刀;
extern int x; //声明
int x; //声明
int x=10; //定义;
如果诸君学过Linux编程的环境变量、网络编程,extern关键字在其中起到了重要的作用,他会从URL中使用HTTP的get方法,获取关键信息;来支持浏览器后台的解析;