`
laowood
  • 浏览: 120459 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C中的寄存器变量和引用变量

阅读更多
总共有auto,static,register,extern。


---------------------------
寄存器变量 register,直接放到cpu中的变量 适合使用频繁的变量,可以提高运行速度。
只限于整形,字符型,指针型的局部变量。寄存器变量是动态变量,仅允许说明两个寄存器变量
eg:register int i;

----------------------------
引用型变量extern,某个模块文件中使用到另一个文件中的全局变量,使用extern来说明。
eg:file1.c中定义了全局变量int s,另一个file2.c中的函数fun1()需使用这个变量s
在file2.c中的fun1()对s进行外部变量说明:
fun1()
{
extern int s;
.....
}
定义时分配内存,其他文件引用时不再分配内存。
3
1
分享到:
评论
3 楼 agurick 2009-03-26  
laowood 写道

在不写的一般情况下都是auto吧?自动变量。


我的理解,函数体内定义的变量,除了static的,其他都是auto的,其实就是栈上的局部变量。auto是历史遗留产物,不要再关心这个了。

再补充一点函数体内定义的static变量和函数外定义的static变量本质是一样的,只不过函数体内的static变量的名字在函数体外不能引用罢了。
2 楼 laowood 2009-03-26  
agurick 写道

补充一下,auto已经过时,已经不再使用。static 变量就存储区域而言和全局变量是一样的,只不过编译时只能生成内部符号,外部模块(其他的.c文件)链接不到。register 只是建议编译器把这个局部变量放到寄存器中而不要放到栈中,但最终是否这样做是由编译器决定的,声明为register的变量不一定会放到寄存器中,而没有声明为register的变量也有可能被放到寄存器中。extern 是向编译器说明,有这样一个这样类型的变量存在,至于是在哪儿定义的让链接器去找吧。


在不写的一般情况下都是auto吧?
自动变量。
1 楼 agurick 2009-03-25  
补充一下,auto已经过时,已经不再使用。
static 变量就存储区域而言和全局变量是一样的,只不过编译时只能生成内部符号,外部模块(其他的.c文件)链接不到。
register 只是建议编译器把这个局部变量放到寄存器中而不要放到栈中,但最终是否这样做是由编译器决定的,声明为register的变量不一定会放到寄存器中,而没有声明为register的变量也有可能被放到寄存器中。
extern 是向编译器说明,有这样一个这样类型的变量存在,至于是在哪儿定义的让链接器去找吧。

相关推荐

    c_全局变量

    "C语言中的变量存储类别和作用域" C语言中变量的存储类别和作用域是非常重要的概念。变量的存储类别决定了变量的生命周期和作用域,而变量的作用域则确定了变量的可见性和生命周期。在C语言中,变量可以分为局部...

    Turbo C下的寄存器变量

    当我们在C语言中声明一个变量为寄存器变量时,编译器会尝试将这个变量存储在CPU的寄存器中,而不是内存的常规区域。这是因为寄存器的访问速度远快于内存,所以如果能够减少从内存读取数据的次数,就能提高程序的运行...

    谈谈C语言中的变量.pdf

    C语言中的变量有其生存期,变量的生存期决定了变量的存储类型和变量的作用域。变量的生存期可以分为自动存储期、静态存储期和寄存器存储期等。 变量的作用域 C语言中的变量有其作用域,变量的作用域决定了变量的...

    C语言的变量PPT课件.pptx

    动态生存期的变量,如局部自动变量和寄存器变量,它们在运行时按需创建,使用完毕后立即销毁。动态生存期的变量存储在动态数据区,通常在函数调用时分配,调用结束时释放。 3.1.1 示例3-1展示了全程生存期和动态...

    OV139 MT9V139 ASX340 寄存器和变量参考

    标题中提到的寄存器和变量参考,实际上是指向这些图像传感器内部的一些可编程控制单元的详细地址索引和参数设置。 首先,要了解这些寄存器和变量的作用,必须对CMOS图像传感器的工作原理有一定了解。CMOS图像传感器...

    C语言访问MCU寄存器的方式

    访问这些寄存器的方式有多种,在C语言中主要有两种方法: 1. 使用标准C的强制类型转换和指针。 这种方法是通过强制类型转换和指针操作来实现对寄存器的访问。例如,定义一个宏来访问DDRB寄存器: ```c #define ...

    使用C语言操作DSP的寄存器

    2. **定义寄存器变量**:基于头文件中的定义,我们可以声明全局或局部变量来表示特定的寄存器。例如,`volatile unsigned int *myControlReg = (unsigned int *)0x12345678;` 这行代码声明了一个指向控制寄存器的...

    C语言、变量和函数的作用域与生存期

    C语言中的变量和函数的作用域与生存期是编程中至关重要的概念,它们直接影响到代码的组织和执行效率。首先,我们来详细了解这些知识点。 **作用域(Scope)**: 作用域指的是变量或函数在程序中可见的范围。C语言中...

    C语言变量类型C语言变量类型.doc

    C语言中的变量类型是编程的基础,它决定了变量的存储方式、生命周期和作用域。下面将详细解释这些变量类型: 1. **auto** 变量: - `auto` 是默认的变量类型,通常用于函数内部定义的变量。它们在函数执行时分配...

    C++变量总结 说明各种变量

    C++提供了四种存储属性:自动变量、外部变量、静态变量和寄存器变量。自动变量是最常见的类型,通常在函数内部声明,其存储空间在栈上分配,并在函数调用结束时自动释放。外部变量则是在函数外部定义的,作用域覆盖...

    51单片机C语言变量定义.pdf

    在51单片机的C语言编程中,变量定义涉及到内存的分配和管理,尤其是当需要访问特殊功能寄存器(Special Function Registers, SFRs)或进行内存分区时。SFR是8051微控制器中用于控制特定硬件功能的寄存器集。在内容...

    Codesys保持变量设置方法

    - **变量的添加**:在CODESYS中,可以通过变量管理器来添加变量,包括系统变量和用户自定义变量。 - **系统变量的添加**:系统变量通常是预定义的,与控制器硬件特性相关,如输入/输出信号,时间戳等。它们可以...

    C++基础--变量的作用域和存储区

    在存储区方面,变量可以有以下几种类型:静态变量、自动变量、外部变量和寄存器变量。静态变量(用`static`关键字声明)的生命周期贯穿整个程序运行,即使在定义它的函数或块结束后仍保留其值。外部变量(在函数外部...

    08-变量类别与编译预处理-自己使用的C语言教程PPT-适合老师备课或者自学.pptx

    全局变量、局部变量、静态变量和寄存器变量各有其特点和用途,而编译预处理则提供了代码复用和文本替换的手段,增强了代码的可读性和效率。在实际编程中,应根据需求灵活运用这些概念,同时注意避免潜在的问题,如...

    局部变量 全局变量和存储分类 局部变量作用域和生存期PPT课件.pptx

    在 C 语言中,变量是程序中最基本的存储单元。变量可以分为局部变量和全局变量两种。局部变量是指在函数内部定义的变量,仅在该函数内部有效。全局变量是指在函数外部定义的变量,整个程序中都可以使用。 局部变量...

    c语言课程笔记31.pdf

    在C语言中,变量的存储方式是编程时需要理解的重要概念,这直接影响到程序的性能和内存管理。本节主要讨论了动态存储和静态存储,以及寄存器变量的使用。 首先,我们来看寄存器变量。寄存器变量是C语言提供的一种...

    C语言的变量剖析.pdf

    C语言中,变量可以分为内部变量和外部变量。内部变量是指定义在函数内部的变量,而外部变量是指定义在函数外部的变量。存储类型可以分为四种:auto、register、static和extern。auto和static表示变量存放在内存中,...

    C语言中变量的作用域.pdf

    在C语言中,变量的作用域是程序设计时必须准确理解和使用的概念。变量的作用域决定了变量能够在程序的哪个部分被访问和修改。理解变量的作用域有助于编写出结构清晰、易于维护的代码。 首先,变量可以分为自动存储...

    c代码-寄存器(regaster)变量输出

    寄存器变量是C语言中的一种存储类修饰符,它的主要目的是请求编译器尽可能地将该变量存储在处理器的寄存器中,而不是存储在内存的常规区域。寄存器是CPU内部的高速存储单元,与内存相比,访问速度更快。因此,如果一...

    变量的存储方式

    在编程领域,尤其是在C语言中,变量的存储方式是理解程序执行机制的关键概念。变量的存储方式分为静态存储和动态存储两种,这两种方式各有特点,适用于不同的场景。 1. 静态存储: - `static`关键字用来声明静态...

Global site tag (gtag.js) - Google Analytics