概述
跟同事讨论代码时,经常冒出声明一个变量、定义一个变量的话。虽然感觉没什么差别,但总是混淆不清,心里难受。查下资料,总结做个笔记总是没错的。
一:两者的定义
- 变量定义
用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。
- 变量声明
用于向程序表明变量的类型和名字,一个变量可以有多个声明。在C语言中,所有的变量都必须先声明后使用。可以用extern这个关键字来声明已经定义的变量。
二:两者的区别
- 定义是特殊的声明,它为对象分配内存。声明没有分配内存,这是最大的区别。
- 声明不一定是定义,定义一定包含声明。声明的变量名字已经匹配到一块内存上了,描述其他地方的创建的对象。
- 一个变量只能定义一次,但可以多次声明。
三:代码演示
这边创建main.c、test.c、test.h三个文件进行演示。
main.c
#include<stdio.h>
#include "test.h"
/*
* 声明变量d, 变量d在test.c里面定义,在这边或者test.h声明,
* 才能在main.c里面调用。不声明的话,编译会失败,声明不分配内存。
*/
extern int d;
void main()
{
int a = 10;
/* 定义且声明变量,同时进行初始化,系统有分配内存 */
int b;
/* 定义且声明变量,但不进行初始化,系统有分配内存 */
b = 20;
printf("a = %d, b = %dn", a, b);
fun_test();
printf("c = %d, d = %dn", c, d);
}
test.c
#include<stdio.h>
int c = 30; /* 定义且声明变量,同时进行初始化,系统有分配内存 */
int d;
/* 定义且声明变量,但不进行初始化,系统有分配内存 */
void fun_test()
{
d = 40;
printf("hello test, c = %d, d = %dn", c, d);
}
test.h
#ifndef TEST_H
#define TEST_H
extern int c;
/* 声明变量c, 系统没有分配内存 */
extern void fun_test(); /* 声明函数fun_test */
#endif
编译执行
laiguoliang@earth:~/test/extern$ ls
main
main.c
test.c
test.h
laiguoliang@earth:~/test/extern$ ./main
a = 10, b = 20
hello test, c = 30, d = 40
c = 30, d = 40
laiguoliang@earth:~/test/extern$
最后
以上就是漂亮蓝天为你收集整理的C语言变量的声明与定义的全部内容,希望文章能够帮你解决C语言变量的声明与定义所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复