设为首页 加入收藏

TOP

关于C语言的定义于声明
2014-11-24 07:34:51 来源: 作者: 【 】 浏览:0
Tags:关于 语言 定义 声明

什么是定义? 什么是声明? 他们之间有什么区别? 这个问题非常重要,这是理解C语言的关键。


举个例子:


(1)int i ; 这是声明


(2)int i = 1; 这才是定义


(3) extern int i ; 这也是声明


什么是定义:


所谓的定义就是(编译器)创建一个对象,并为这个对象分配一快内存并给他取上一个名字,这名字就是偶们说的变量名或者 对 象。


什么是声明:


(1)告诉编译器,这名字语句匹配到一块内存上来。下面代码用到的变量是在别的地方定义的。


(2)告诉编译器,这名字偶预定了,别的地方再也不可以用他来作变量名或者对象名。


他们之间的区别:


(1)定义创建对象并为之分配内存,而声明没有。


(2)定义只可以一次,而声明却可以多次。


上面是从C语言的角度来说的,现在让偶们换种思维方式,从最底层的汇编的角度来看看声明跟定义之间的区别。


让偶们看两个简单的例子,然后对比一下就清楚了。


(1)test1.c


#include


int a = 1;


int main(void)


{


}


让偶们反汇编看看 gcc -S test1.c


test1.s (END)


现在让偶们看看声明


(2) test2.c


#include


extern int a;


int main(void)


{


}


让偶们反汇编看看。gcc -S test2.c


.file "test2.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.4 20100503 (Red Hat 4.4.4-2)"
.section .note.GNU-stack,"",@progbits


~看到没,有区别把。因为a是只是一个声明而已,编译器并没有给他分配内存。a既不在数据段,也不在bss段中。


以上内容需要熟悉LINUX与GCC的使用。以及汇编的基础。如果内容有不正确的地方,请指出来告诉偶。谢谢。(主页上的个人档案里有偶的联系方式)


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下CAT程序的C实现 下一篇Linux 两种方式创建内核线程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)