打印
[其它应用]

变量的声明和定义有什么区别

[复制链接]
5102|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
豌豆爹|  楼主 | 2024-3-4 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

变量的定义为变量分配地址和存储空间, 变量的声明不分配地址。一个变量可以在多个地方声明, 但是只在一个地方定义。加入extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量。

int main()
{
   extern int A;
   //这是个声明而不是定义,声明A是一个已经定义了的外部变量
   //注意:声明外部变量时可以把变量类型去掉如:extern A;
   dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量
2. 简述#ifdef、#else、#endif和#ifndef的作用

利用#ifdef、#endif将某程序功能模块包括进去,以向特定用户提供该功能。在不需要时用户可轻易将其屏蔽。

#ifdef MATH
#include "math.c"
#endif

在子程序前加上标记,以便于追踪和调试。

#ifdef DEBUG
printf ("Indebugging......!");
#endif

应对硬件的限制。由于一些具体应用环境的硬件不一样,限于条件,本地缺乏这种设备,只能绕过硬件,直接写出预期结果。

「注意」:虽然不用条件编译命令而直接用if语句也能达到要求,但那样做目标程序长(因为所有语句都编译),运行时间长(因为在程序运行时间对if语句进行测试)。而采用条件编译,可以减少被编译的语句,从而减少目标程序的长度,减少运行时间。


使用特权

评论回复
沙发
我喜欢打游戏| | 2024-3-4 17:13 | 只看该作者
变量的定义为变量分配地址和存储空间, 变量的声明不分配地址。

使用特权

评论回复
板凳
两只袜子| | 2024-4-16 11:01 | 只看该作者
变量定义 (Variable Definition):

定义意味着为变量分配存储空间,它是实际创建变量的步骤。
定义会确定变量的类型和名称,并在内存中为该变量划出一块足够存放其类型的内存空间。
在程序执行期间,每个变量只能被定义一次,遵循“一次定义原则”(One Definition Rule, ODR)。
定义可以并且常常伴随着初始化,即在定义的同时给变量赋予一个初始值,如 int age = 20; 这不仅定义了变量age,还初始化了age为20。
变量声明 (Variable Declaration):

声明则仅仅是向编译器宣告变量的存在,告知编译器变量的类型,但并不立即分配存储空间。
声明可以出现在多个地方,并且允许在声明时不提供初始值。
使用 extern 关键字声明变量时,编译器知道该变量将在其他翻译单元(通常是另一个文件中)被定义。
声明的目的主要是为了让编译器能够识别变量的名字和类型,确保后续使用的合法性。

使用特权

评论回复
地板
亚瑟| | 2024-4-23 14:17 | 只看该作者
不用extern声明可以通过编译吗?

使用特权

评论回复
5
w2nme1ai7| | 2024-4-24 12:20 | 只看该作者
其实,在C++中,变量的声明和定义是两个不同的概念

使用特权

评论回复
6
cen9ce| | 2024-4-24 13:11 | 只看该作者
声明是指在程序中告诉编译器某个变量的存在,但并不分配内存空间

使用特权

评论回复
7
b5z1giu| | 2024-4-24 14:24 | 只看该作者
一般来说,声明通常在头文件中进行,用于向编译器提供有关变量的信息,包括变量的名称、类型和作用域等

使用特权

评论回复
8
tax2r6c| | 2024-4-24 15:32 | 只看该作者
我了解的是,声明可以多次进行,但只能定义一次。

使用特权

评论回复
9
suw12q| | 2024-4-24 16:07 | 只看该作者
其实定义一般可以说是为了初始化而生吧

使用特权

评论回复
10
lamanius| | 2024-4-24 18:10 | 只看该作者
定义通常在源文件中进行,用于实际创建变量并分配内存

使用特权

评论回复
11
l1uyn9b| | 2024-4-25 07:14 | 只看该作者
一个变量只能被定义一次,但可以在多个地方进行声明

使用特权

评论回复
12
liu96jp| | 2024-4-25 08:39 | 只看该作者
需要注意的是,全局变量在声明时如果没有使用extern关键字,则默认为定义

使用特权

评论回复
13
zhizia4f| | 2024-4-25 10:05 | 只看该作者
局部变量在声明时必须同时进行定义

使用特权

评论回复
14
kaif2n9j| | 2024-4-25 11:00 | 只看该作者
定义是指在程序中为变量分配内存空间,并可以进行初始化

使用特权

评论回复
15
亚瑟| | 2024-5-24 23:42 | 只看该作者
只声明的话会不会分配地址?

使用特权

评论回复
16
yangjiaxu| | 2024-5-27 21:12 | 只看该作者
定义就是要赋值了吧,声明不需要

使用特权

评论回复
17
Henryko| | 2024-6-27 17:46 | 只看该作者
声明不定义的话可能是乱码

使用特权

评论回复
18
药无尘| | 2024-6-28 13:11 | 只看该作者
一个变量可以在多个地方声明, 但是只在一个地方定义。

使用特权

评论回复
19
狄克爱老虎油| | 2024-7-22 14:34 | 只看该作者
这是不是重定义了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

513

主题

1978

帖子

5

粉丝