搜档网
当前位置:搜档网 › C语言变量的声明和空间的分配

C语言变量的声明和空间的分配

C语言变量的声明和空间的分配
C语言变量的声明和空间的分配

无论用什么语言编制的程序,都是为让计算机完成某一特定功能而编写的文本文件。这些文本文件是不能直接在机器上运行的,它们必须经过系统软件(包括编辑器和编译器)的输入并编译或汇编后,转换成二进制的可执行代码,才是计算机可以识别的机器语言。此时,程序就是一个包含二进制可执行代码文件的模块。当内核把二进制的可执行代码装入内存后,它由三部分组成:代码段、数据段、堆栈段。在线性地址的低地址字段是代码段,存放程序经编译后的可执行代码(程序文本)。在操作系统中,代码段是只读的,不能修改,所以,代码段的长度是不会改变的。在程序文本(代码段)的上方是数据段,用来存放程序的变量、字符串和其它数据。它分为初始化静态数据(data)和未初始化静态数据(BSS)。数据段的长度是可以改变的。程序可以修改其中的变量。在程序设计中,将其值可以改变的量称为变量。每一个变量在内存中都要占据一定的存储单元,因此,每一个变量也就会具有一定的存储属性。

从变量的作用域(空间)的角度来考虑变量的属性,可将变量分为全局变量和局部变量。局部变量

局部变量是指在一个函数内部定义的变量,它只中本函数范围内有效。

说明:

1、在主函数中定义的变量只在主函数中有效,且主函数也不能使用其他函数中定义的变量

2、在不同函数中可以使用相同名字的变量,它们代表不同的变量,互不干扰;

3、形参也是局部变量,也只在对应的函数中有效,其他函数不能使用

4、在一函数内部,可在复合语句(有一个{}括起的一组语句)中定义变量,这些变量只在本复合语句中有效。

全局变量

程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数之外定义的变量称为外部变量(extern),也叫全局变量。全局变量的有效范围是从定义变量的位置开始到本源程序文件结束为止,其关键字extern可以省略。

说明:

1、在一个函数中既可以使用本函数中的局部变量,又可以使用有效的全局变量。

2、设置全局变量的作用是增加函数间数据联系的渠道。由于同一文件中的若干函数均能引用全局变量的值,因而若在一个函数中改变了全局变量的值,就能影响其他函数,相当于各函数有了直接的传递通道,即公共变量,从而可能从函数获得一个以上的返回值。

3、建议不在必要时不要使用全局变量,因为:

(1)全局变量在程序的整个执行过程中都占用存储单元;

(2)它将降低函数的通用性。因为函数执行时要依赖对应的全局变量

(3)降低了函数的独立性,从而降低了函数的内聚度,增加了函数间的耦合度。而结构化程序设计的基本原则是:应争取组成程序的各模块(在C语言中用函数实现)具有尽可能高的内聚度和尽可能低的耦合度。

(4)如果外部(全局变量)在文件开头定义,则其作用范围为整个文件;如果不在文件开头定义,则其作用范围为定义点到文件终了处。若在定义点前的函数想引用此外部变量,则应在该函数中用关键字extern对外部变量作说明。

(5)如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。

变量的生存周期

从变量存在的时间(生存期)的角度来考虑变量的属性,则可将变量分为动态存储变量和静态存储变量。在C语言中,每一个变量和函数都具有两个属性:类型和存储类别。类型即int、float等,存储类别指的是数据在内存中存储的方式(属性)。存储方式分为静态存储和动态存储两大类,但具体有四种:自动型(auto,即局部变量)、寄存器型(register)、静态型(static)、外部型(extern,其它文件中定义过的全局变量),其中,静态型和外部型变量为静态存储变量,自动型和寄存器型变量为动态存储变量。在定义变量时,应先说明存储类型,再说明数据类型,最后说明变量名。

因此,静态存储变量也分静态全局变量和静态局部变量,动态存储变量则都是局部的?静态存储变量是指在程序运行期间占据固定的内存单元的变量,包含全局(extern,当然extern 可省)变量、静态全局变量(加static的全局变量)和局部静态变量(冠以关键字static 的局部变量)。

1、对于全局变量,在程序开始执行时就给它分配内存单元,直到程序终结时才释放。它可由本文件和其它文件中的函数所引用。在其它文件中被引用时,应该在文件开头有一个extern说明(注意,此说明在函数外),说明在引用该变量的文件中出现的变量是一个已在其他文件中定义过的全局(外部)变量,本文件不必再为它分配内存单元。本来外部变量的

作用域是从它的定义点到文件结束,但可以用extern说明将其作用域扩大到有extern说明的其它文件。但使用这样的全局变量是应十分慎重,因为在执行一个文件中的函数时,可能会改变该全局变量的值,从而会影响到另一文件中函数的执行结果。

2、对于静态外部(全局)变量,即冠以static的全局变量,也在编译时分配在静态存储区,它只在本文件内有效,其它文件不能引用。(编译还是执行?)

3、对于局部静态变量,即在局部变量前冠以关键字static的变量,在编译到它时分配存储单元,直到程序结束才释放。在程序的执行过程中它们占据固定的存储单元,而不是动态的分配和释放。当希望函数中的局部变量之值在函数调用结束后不消失而保留原值时,可定义为静态局部变量。这样,函数调用结束后,其占用的单元不释放,在下一次调用该函数时,变量保留上一次函数调用结束时的值。静态局部变量不能被其它函数访问。

注:当全局变量和静态局部变量未赋初值时,系统自动置为0。

动态存储变量

存储在动态存储区的变量叫动态存储变量。它们在程序执行的某一时刻被动态地建立并在另一时刻又被动态地撤消,即使用到时为其分配存储单元,使用完即释放。

在动态存储区存储的变量有:

1、函数的形参变量。在调用函数时给形参变量分配存储空间。

2、局部变量(未加static说明的局部变量,即自动变量auto)。自动变量是在函数或复合语句内部定义的变量(即前面所说的局部变量)。当程序块执行时,为它定义的自动型变量分配内存单元,在程序执行完成后,便释放这些变量占用的内存单元。在定义自动型变量时,一般缺省存储类型名auto;自动变量若未赋初值,则其初值不定(将分配给它的存储单元的当前值作为初值,这是和静态存储变量不同的地方)。

3、函数调用时的现场保护和返回地址等。

以上三种变量在函数调用开始时分配动态存储单元,函数结束时释放这些单元。在程序执行过程中,这种分配和释放是动态的,如果一个程序中多次调用同一函数,分配给此函数中局部变量的存储空间地址可能是不同的。如果一个程序包含若干个函数,每个函数中的局部变量的生存期并不等于整个程序的执行周期,而只是程序执行周期的一部分,并根据函数调用的需要,动态地分配存储空间。

寄存器变量

一般情况下,变量(包括静态存储方式和动态存储方式)的值都是存放在内存中的,当程序中用到哪一个变量的值时,同控制器发出指令将内存中该变量的值送到运算器中。经过运算器

进行运算。如果需要存数,再从运算器将数据送到内存存放。但如果有一些变量使用频繁,为了节省存取时间,提高执行效率,C语言允许将其值存放在运算器中的寄存器中,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做“寄存器变量”,用关键字register于以说明,在函数内部定义。

说明:

1、只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行。在调用一个函数时占用一些寄存器以存放寄存器变量的值,调用结束时释放寄存器。

2、一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量,且不同的系统允许使用的寄存器变量个数不同。

3、不同系统对寄存器变量的处理是不同的。微机上用的MS C,Turbo C将寄存器变量当作自动变量处理,分配内存单元,并不真正把它们存放在寄存器中。因此,虽然程序合法,但并不提高执行速度。而PDP-11只允许将int、char和指针型变量定义为寄存器变量

4、局部静态变量不能定义为寄存器变量。即不能把变量既放在静态存储区中,又放在寄存器中。

总结:

全局变量、静态数据、常量存放在全局数据区(即我上面所说的数据段),所有函数的代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区。

所以在同一个进程里,多个任务(线程)的全局变量和静态变量都应该是共享同一块内存(全局数据区即数据段)

而在不同的进程里,重新加载了代码,各个进程间的全局变量和静态变量当然不是拥有同一块内存。

在psos下,各个任务是不同的线程,所以各个任务的全局变量和静态变量是在同一块内存。而我的另一个程序中(在scounix),是每次运行都是一个新的进程,所以各个进程的全局变量和静态变量拥有不同的内存

变量分类表

堆和栈

堆和栈是两个概念。堆栈是一个很混淆的说法。栈是局部变量与参数存放的空间,是由编译器来处理的。堆是动态分配空间,需要自已管理,申请或释放。“栈”是“堆栈”的简称,英文为stack,是个先进后出的线性结构,主要用来存放auto类型的局部变量、给函数传

递参数等。至于“堆”,英文名为heap,主要用作动态分配内存用,new分配的内存是在堆中而不是在栈中!堆和栈都是存储空间的分派方式,存储空间的分配方式有3种,静态存储分配,栈式分配,和堆式分配;后两者属于动态内存的分配。

静态存储分配要求在编译时能够知道所有的变量的存储的要求,比如程序种的变量和常量;栈式存储则要求在过程中的入口处必须知道所有的存储要求。前两种存储空间的分配方式比较常见,有时候都不能满足上面两种情况的情况,有些存储的要求只能在程序执行的过程中被赋新值或创建新的结构事例才能知道,这些语句有new() dispose ,allocate

free 等,对于这种情况,采用了堆的存储空间分配管理。堆,是一块固定大小的空间,当需要分配的时候,就在这些空间里,划分出一块给用户用,当用完了,就可以释放掉,他没有后进先出的规则。就像仓库里的东西,随时可以拿出来,随时可以方回去。堆的操作时编译器的工作,用户不去管理它。在编译原理中有关于堆和栈的详细介绍。

在汇编中,其实就没有堆的概念,只有数据段和栈,即data segment和stack。汇编中,已经基本上把堆栈的概念当作栈了。对栈的操作,用户使用,也可以对自己的栈进行管理。堆,由于比较麻烦,堆的管理已经不是用户的职能之内了,体现在用户的面前的,只是存储空间的动态申请和释放。如果非要弄清楚汇编里堆是如何实现的,倒不如看看汇编里是如何动态的管理存储空间的。汇编里实现存储空间的动态管理,采用的是两个中断: 21号中断中的 48H和 49H 两个功能

这两功能具体使用方法,呵呵,查查中断手册就知道了。

C_C++变量命名规则

C/C++变量命名规则 变量命名规则是为了增强代码的可读性和容易维护性。以下为C++必须遵守的变量命名规则: 1、变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。 2、第一个字母必须是字母或者下划线开头。 3、不能使用C++关键字来命名变量,以免冲突。 4、变量名区分大小写。 变量命名规则: 一、用最短字符表示最准确的意义。 二、使用变量前缀。 1、整型前缀 int nId; //int前缀:n short sId; //short前缀:s unsigned int unId // unsigned int 前缀:un long lId; //long前缀:l 2、浮点型前缀 float fValue; //float前缀:f double dValue; //double前缀:d 3、字符型前缀 char chChar; //char前缀:ch 4、字符串前缀 char szPath; //char字符串前缀:sz string strPath; //string字符串前缀:str CString strPath; //MFC CString类前缀:str 5、布尔型前缀 bool bIsOK; //bool类型前缀:b BOOL bIsOK; //MFC BOOL前缀:b 6、指针型前缀 char * pPath; //指针前缀:p 7、数组前缀 int arrnNum; //数组前缀:arr CString arrstrName; //数组前缀+类型前缀+名称

8、结构体前缀 STUDENT tXiaoZhang; //结构体前缀:t 9、枚举前缀 enum emWeek; //枚举前缀:em 10、字节的前缀 BYTE byIP; //字节前缀:by 11、字的前缀 DWORD dwMsgID; //双字前缀:dw WORD wMsgID; //单字前缀:w 12、字符指针前缀 LPCTSTR ptszName; //TCHAR类型为ptsz LPCSTR pszName; //pcsz LPSTR pszName; //psz 13、STL容器前缀 vector vecValue; //vector容器前缀:vec 14、RECT矩形结构前缀 RECT rcChild; //rc CRECT rcChild/ //rc 15、句柄前缀 HWND hWndDlg; //h HBRUSH hBr; //h HPEN hPen; //h HBITMAP hBmpBack; //h 16、Windows颜色前缀 COLORREF crFont; //cr 17、Windows DC前缀 CDC dcClient; //dc 三、类的成员变量以m_开头,后面为变量,变量同时还要加前缀。 CString m_strName; //m_开头+类型前缀+名称 四、定义一个变量,为了简化,在不影响变量意义的情况下,可仅仅使用前缀。 RECT rc; 五、全局变量一律以g_开头,后面为变量,变量同时还要加前缀。

单片机C语言变量名命名规则整理

C语言变量名命名规则 一、程序风格: 1、严格采用阶梯层次组织程序代码: 各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。 要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: 2、提示信息字符串的位置 在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。 3、对变量的定义,尽量位于函数的开始位置。 二、命名规则: 1、变量名的命名规则 ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。 即:变量名=变量类型+变量的英文意思(或缩写) 对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。 见下表:

对未给出的变量类型要求提出并给出命名建议给技术委员会。 ②、指针变量命名的基本原则为: 对一重指针变量的基本原则为: “p”+变量类型前缀+命名 如一个float*型应该表示为pfStat 对多重指针变量的基本规则为: 二重指针:“pp”+变量类型前缀+命名 三重指针:“ppp”+变量类型前缀+命名 ...... ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写) ④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:变量名=s_+变量类型+变量的英文意思(或缩写) ⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写) ⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。 如:enum cmEMDAYS { EMDAYS_MONDAY; EMDAYS_TUESDAY; …… }; ⑦、对struct、union、class变量的命名要求定义的类型用大写。并要加

单片机C语言变量定义

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:[存储种类] 数据类型[存储器类型] 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEILuVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。 COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。

单片机C语言变量定义定稿版

单片机C语言变量定义 HUA system office room 【HUA16H-TTMS2A-HUAS8Q8-HUAH1688】

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: [存储种类] 数据类型[存储器类型] 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEIL uVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二AT89C51特殊功能寄存器列表

表6-1 存储器类型 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。

c语言函数命名规范

竭诚为您提供优质文档/双击可除 c语言函数命名规范 篇一:c语言命名规则 匈牙利命名法是微软推广的一种关于变量、函数、对象、前缀、宏定义等各种类型的符号的 命名规范。匈牙利命名法的主要思想是:在变量和函数名中加入前缀以增进人们对程序的理 解。它是由微软内部的一个匈牙利人发起使用的,结果它在微软内部逐渐流行起来,并且推 广给了全世界的windows开发人员。下面将介绍匈牙利命名法,后面的例子里也会尽量遵守 它和上面的代码风格。 aarray数组 bbool(int)布尔(整数) byunsignedchar(byte)无符号字符(字节) cchar字符(字节) cbcountofbytes字节数 crcolorreferencevalue颜色(参考)值 cxcountofx(short)x的集合(短整数)

dwdwoRd(unsignedlong)双字(无符号长整数) fFlags(usuallymultiplebitvalues)标志(一般是有多位的数值) fnFunction函数 g_global全局的 hhandle句柄 iinteger llong lplongpointer m_datamemberofaclass 成员 nshortint ppointer sstring szzeroterminatedstring 符串 tmtextmetric uunsignedint ulunsignedlong(ulong)整数长整数长指针一个类的数据短整数指针字符串以0结尾的字文本规则无符号整数无符号长整数 wwoRd(unsignedshort)无符号短整数

C++变量命名规则

C++变量命名规则2008-09-03 14:48a Array 数组 b BOOL (int) 布尔(整数) by Unsigned Char (Byte) 无符号字符(字节) c Char 字符(字节) cb Count of bytes 字节数 cr Color reference value 颜色(参考)值 cx Count of x (Short) x的集合(短整数) dw DWORD (unsigned long) 双字(无符号长整数) f Flags (usually multiple bit values) 标志(一般是有多位的数值) fn Function 函数 g_ global 全局的 h Handle 句柄 i Integer 整数 l Long 长整数 lp Long pointer 长指针 m_ Data member of a class 一个类的数据成员 n Short int 短整数 p Pointer 指针 s String 字符串 sz Zero terminated String 以0结尾的字符串 tm Text metric 文本规则 u Unsigned int 无符号整数

ul Unsigned long (ULONG) 无符号长整数 w WORD (unsigned short) 无符号短整数 x,y x, y coordinates (short) 坐标值/短整数 v void 空 有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。 前缀类型例子 g_ 全局变量g_Servers C 类或者结构体CDocument,CPrintInfo m_ 成员变量m_pDoc,m_nCustomers VC常用前缀列表: 前缀类型描述例子 ch char 8位字符chGrade ch TCHAR 16位UNICODE类型字符chName b BOOL 布尔变量bEnabled n int 整型(其大小由操作系统决定)nLength n UINT 无符号整型(其大小由操作系统决定)nLength

C语言编程规范简述

C语言编程规范简述 注释规范 注释的原则和目的注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的——清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释——过量的注释则是有害的。 注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止重复注释信息。 进行注释时的注意事项:(1)建议边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。(2)注释的内容要清楚、明了,含义准确,防止注释二义性。说明:错误的注释不但无益反而有害。(3)避免在注释中使用缩写,特别是非常用缩写。在使用缩写时或之前,应对缩写进行必要的说明。 命名规范 命名的基本原则: (1)标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解——尽量采用采用英文单词或全部中文全拼表示,若出现英文单词和中文混合定义时,使用连字符“_”将英文与中文割开。较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。例如:temp->tmp、flag->标志寄存器、statistic->stat、increment->inc、message->msg等缩写能够被大家基本认可。 (2)命名中若使用特殊约定或缩写,则要有注释说明。应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。 (3)自己特有的命名风格,要自始至终保持一致,不可来回变化。个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即命名规则中没有规定到的地方才可有个人命名风格)。 (4)对于变量命名,禁止取单个字符(如i 、j 、k... ),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i 、j 、k 作局部循环变量是允许的。变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。 (5)除非必要,不要用数字或较奇怪的字符来定义标识符。 (6)命名规范必须与所使用的系统风格保持一致,并在同一项目中统一。 (7)在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。 (8)用正确的反义词组命名具有互斥意义的变量或相**作的函数等。

C 函数变量命名规则

a Array数组 b BOOL(int)布尔(整数) by Unsigned Char(Byte)无符号字符(字节) c Char字符(字节) cb Count of bytes字节数 cr Color reference value颜色(参考)值 cx Count of x(Short)x的集合(短整数) dw DWORD(unsigned long)双字(无符号长整数) f Flags(usually multiple bit values)标志(一般是有多位的数值) fn Function函数 g_global全局的 h Handle句柄 i Integer整数 l Long长整数 lp Long pointer长指针 m_Data member of a class一个类的数据成员 n Short int短整数 p Pointer指针 s String字符串 sz Zero terminated String以0结尾的字符串 tm Text metric文本规则 u Unsigned int无符号整数 ul Unsigned long(ULONG)无符号长整数 w WORD(unsigned short)无符号短整数

x,y x,y coordinates(short)坐标值/短整数 v void空 有关项目的全局变量用g_开始,类成员变量用m_,局部变量若函数较大则可考虑用l_用以显示说明其是局部变量。 前缀类型例子 g_全局变量g_Servers C类或者结构体CDocument,CPrintInfo m_成员变量m_pDoc,m_nCustomers VC常用前缀列表: 前缀类型描述例子 ch char8位字符chGrade ch TCHAR16位UNICODE类型字符chName b BOOL布尔变量bEnabled n int整型(其大小由操作系统决定)nLength n UINT无符号整型(其大小由操作系统决定)nLength w WORD16位无符号整型wPos l LONG32位有符号整型lOffset dw DWORD32位无符号整型dwRange p*Ambient memory model pointer内存模块指针,指针变量pDoc lp FAR*长指针lpDoc lpsz LPSTR32位字符串指针lpszName lpsz LPCSTR32位常量字符串指针lpszName lpsz LPCTSTR32位UNICODE类型常量指针lpszName h handle Windows对象句柄hWnd

C语言常用规则

C语言常用规则 一、程序风格: 1、严格采用阶梯层次组织程序代码: 各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。 要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: 2、提示信息字符串的位置 在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。 3、对变量的定义,尽量位于函数的开始位置。 这样的目的是为了检查的方便,以后自己看或检查和别人看会方便很多,具体的资料还可以参考林锐写的关于C语言的一个文章! 二、命名规则: 1、变量名的命名规则 ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。 即:变量名=变量类型+变量的英文意思(或缩写) 对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。 见下表:

对未给出的变量类型要求提出并给出命名建议给技术委员会。 ②、指针变量命名的基本原则为: 对一重指针变量的基本原则为: “p”+变量类型前缀+命名 如一个float*型应该表示为pfStat 对多重指针变量的基本规则为: 二重指针:“pp”+变量类型前缀+命名 三重指针:“ppp”+变量类型前缀+命名 ...... ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写) ④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:变量名=s_+变量类型+变量的英文意思(或缩写) ⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写) ⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。 如:enum cmEMDAYS { EMDAYS_MONDAY; EMDAYS_TUESDAY;

单片机C语言变量定义

单片机C语言变量定义集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

单片机教程,51单片机C语言学习第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: [存储种类] 数据类型[存储器类型] 变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEILuVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二AT89C51特殊功能寄存器列表

表6-1 存储器类型 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显着的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。 COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。 LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区外部数据区最多可有64KB,这要求用DPTR数据指针访问数据。 之前提到简单提到sfr,sfr16,sbit定义变量的方法,下面我们再来仔细看看。 sfr和sfr16可以直接对51单片机的特殊寄存器进行定义,定义方法如下:sfr特殊功能寄存器名=特殊功能寄存器地址常数; sfr16特殊功能寄存器名=特殊功能寄存器地址常数; 我们可以这样定义AT89C51的P1口 sfrP1=0x90;//定义P1I/O口,其地址90H sfr关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1口可以用P1为名,这样程序会变的好读好多。等号后面必须是

C语言程序设计代码规范

C++语言程序设计代码规范 1 命名规范 本规范对变量、函数、类(结构)等的名称有严格的规定,在编码过程中务必遵守。 1.1 变量命名规范 变量名称采用匈牙利命名法,即:完整的名称由“缀”和“主体”复合而成。“缀”用于指示变量的种类、数值类型、作用域等属性,由小写字符和下划线(_)组成,根据其附着在“主体”的位置分为前缀和后缀两种。“主体”表示变量的语义。 整个变量名称的格式如下: <作用域前缀>[<指针缀>]<类型缀><主体><作用域后缀> 下面详细论述。 1.1.1 作用域缀(前缀和后缀) 作用域前缀处在整个变量名的最前面。常用的作用域前缀为: 作用域后缀处在整个变量名的最后面。只有一种情况使用作用域后缀,就是函数的形参必须以作用域后缀结束。 1.1.2 指针缀 如果一个变量是指针,则必须使用指针缀。指针缀使用字母p表示。 以前,在DOS平台下有短指针和长指针的区别,有时称长指针为lp。在Win32平台下已经不存在这个区别了,所以统一使用p, 而不是lp。 1.1.3 类型缀 类型缀由小写字符构成,用于描述变量的类型。注意: 1.不要私自创造出各种各样的前缀。 2.也没有必要在前缀中仔细区分一些细小的类型区别,那样会给代码维护工作带来额外的麻烦。 常用的类型前缀为:

对于其他不在上面表中的结构、类等复杂数据类型,特别是不常使用的和不通用的,不使用前缀。例如: class Person Jonson; struct DateTime MyDt; 在应用场合明确的情况下,例如:简单的局部变量,它的值类型前缀有时可以省略。具体见下面的例子。 1.1.4 复合前缀 根据以上规则,变量根据它所在的作用域、类型、是否是指针,得到一个复合前缀。例如: char g_szFileName[_MAX_PATH]; //全局字符串变量 char* g_pszFileName; //全局字符串指针变量: char s_szFileName[_MAX_PATH]; //静态字符串变量 char* s_pszFileName; //静态字符串指针变量: char _s_szFileName[_MAX_PATH]; //局部静态字符串变量 char* _s_pszFileName; //局部静态字符串指针变量: char m_szFileName[_MAX_PATH]; //类字符串变量 char* m_pszFileName; //类字符串指针变量: char ms_szFileName[_MAX_PATH]; //类静态字符串变量 char* ms_pszFileName; //类静态字符串指针变量: 更多的例子,参见下面按照作用域讨论变量名一节。 1.1.5 主体 用于描述变量的上下文意义。 一般地,由首字母大写的一个或者多个单词构成,要求用英语作为描述语言。如:FileName,

C语言全局变量定义方法

C语言全局变量定义方法 (2011-11-25 21:11:28) 转载▼ 标签: 分类:C语言 杂谈 今天调试系统的时候,需要定义几个全局位变量,定义好后一编译,发现错误一大堆,错误基本都是位变量定义时产生的。以前也定义过全局变量啊,但是先前怎么没错误?瞎折腾了一会最后还是发现问题出在细节上面了。以前只是侥幸没遇到而已。今天做个总结,以后再忘记了就回来直接查一下。 我们都知道定义在函数外部的变量就叫做全局变量,但是通常只有一个C文件和一个H文件的时候那样定义是不会出问题的。一个大的系统会包含好多个.C文件和.H文件,每个.C文件都有可能会访问全局变量,所以全局变量在定义的时候就要稍微做下改变了。通常的做法是建立一个包含系统所有全局变量的.H文件,系统用到的所有全局变量都定义在该文件内,文件名可以用Global修饰一下。在该文件中定义某个全局变量的时候需要用extern声明该变量为外部变量。比如要定义SysEventCounter标志为unsigned char型的全局变量可以这样定义: extern unsigned char SysEventCounter; <----这里是关键,不能对该变量赋值,只能声明,赋值就会报错。 上述声明是写在.H文件中的。其他.C文件若要用到该变量,直接包含该.H文件就可以了 如果想要赋初值,可以在用到它的.C文件中这样写: unsigned char SysEventCounter = 0; 不用赋初值时,直接 unsigned char SysEventCounter; 就可以了。注意:只需要在一个.C文件中写即可,其他.C文件直接可以用。如果在其他.C 文件中也这样写会产生重复定义的错误。

c语言变量命名规则较多较乱

c语言变量命名规则_较多较乱 几年以前,Charles Simonyi(他后来成为微软的著名程序员)设计了一种以前缀为基础的命名方法,这种方法后来称为"匈牙利表示法"以记念他.他的思想是根据每个标识符所代表的含义给它一个前缀.微软后来采用了这个思想,给每个标识符一个前缀以说明它的数据类型.因此,整型变量的前缀是n,长整型变量是nl,字符型数组变量是ca,以及字符串(以空类型结尾的字符数组)以sz为前缀.这些名字可能会非常古怪.比如说:lpszFoo表示"Foo"是一个指向以空字符为结尾的字符串的长整型指针. 这种方法的优点是使人能够通过变量的名字来辨别变量的类型,而不比去查找它的定义.遗憾的是,这种方法不仅使变量名字非常绕口,而且使改变变量类型的工作变得十分艰巨.在Windows3.1中,整型变量为16为宽.如果我们在开始时采用了一个整型变量,但是在通过30---40个函数的计算之后,发现采用整型变量宽度不够,这时我们不仅要改变这个变量的类型,而且要改变这个变量在这30--40个函数中的名字. 因为不切实际,除了一些顽固的Windows程序员外已经没有人再使用"匈牙利表示法"了.毫无疑问,在某种场合它依然存在,但大部分人现在已经抛弃它了.一般而言,输入前缀是一种糟糕的想法,因为它把变量于其类型紧紧地绑在了一起. 对于30行以下的函数,匈牙利方法一般有优势。 尤其是对界面编程,有优势。 但对于有强烈的算法要求、尤其是有很多抽象类型的C++程序,匈牙利方法简直是一个灾难。 看你用在什么地方。 现在有了很好的IDE工具,如:VC,SourceInsight等. 选中变量,会自动提示告诉你它的声明和定义,这样 匈牙利命名法就没有很大的必要了.

c语言源程序名的后缀命名规则

C语言源程序命名规则 C是一门朴素的语言,你使用的命名也应该这样。与Modula-2和Pascal程序员不同,C程序员不使用“ThisVariableIsATemporaryCounter”这样“聪明”的名字。C程序员应该叫它“tmp”,这写起来更简单,也不会更难懂。 然而,当面对复杂情况时就有些棘手,给全局变量取一个描述性的名字是必要的。把一个全局函数叫做“foo”是一种目光短浅的行为。全局函数也一样,如果你有一个统计当前用户个数的函数,应当把它命名为“count_active_user()”或者简单点些的类似名称,不应该命名为“cntusr()”。 1、三种流行的命名法则 目前,业界共有四种命名法则:驼峰命名法、匈牙利命名法、帕斯卡命名法和下划线命名法,其中前三种是较为流行的命名法。 (1)驼峰命令法。正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数: printEmployeePaychecks(); print_employee_paychecks(); 第一个函数名使用了驼峰命名法,函数名中的每一个逻辑断点都有一个大写字母来标记。第二个函数名使用了下划线法,函数名中的每一个逻辑断点都有一个下划线来标记。 驼峰命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是C出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。

(2)匈牙利命名法。广泛应用于象Microsoft Windows这样的环境中。Windows 编程中用到的变量(还包括宏)的命名规则为匈牙利命名法,这种命名技术是由一位能干的Microsoft 程序员查尔斯-西蒙尼(Charles Simonyi) 提出的。 匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等。这些符号可以多个同时使用,顺序是先m_(成员变量)、再指针、再简单数据类型、再其它。这样做的好处在于能增加程序的可读性,便于对程序的理解和维护。 例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。 匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。 (3)帕斯卡(pascal)命名法。与驼峰命名法类似,二者的区别在于:驼峰命名法是首字母小写,而帕斯卡命名法是首字母大写,如:DisplayInfo(); string UserName; 二者都是采用了帕斯卡命名法。 (4)三种命名规则的小结:MyData就是一个帕斯卡命名的示例;myData是一个驼峰命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼;iMyData是一个匈牙利命名法,它的小写的i说明了它的型态,后面的和帕斯卡命名相同,指示了该变量的用途。 2、命名的基本原则 (1)标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解——尽量采用采用英文单

C语言命名规范

C是一门朴素的语言,你使用的命名也应该这样。与Modula-2和Pascal程序员不同,C程序员不使用诸如“ThisVariableIsATemporaryCounter”这样“聪明”的名字。C程序员应该叫它“tmp”,这写起来更简单,也不会更难懂。 然而,当面对复杂情况时就有些棘手,给全局变量取一个描述性的名字是必要的。把一个全局函数叫做“foo”是一种目光短浅的行为。全局函数也一样,如果你有一个统计当前用户个数的函数,应当把它命名为 “count_active_user()”或者简单点些的类似名称,不应该命名为“cntusr()”。 1 三种流行的命名法则目前,业界共有四种命名法则:驼峰命名法、匈牙利命名法、帕斯卡命名法和下划线命名法,其中前三种是较为流行的命名法。 (1)驼峰命令法。正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数: printEmployeePaychecks(); print_employee_paychecks(); 第一个函数名使用了驼峰命名法,函数名中的每一个逻辑断点都有一个大写字母来标记。第二个函数名使用了下划线法,函数名中的每一个逻辑断点都有一个下划线来标记。 驼峰命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是C出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。 (2)匈牙利命名法。广泛应用于象Microsoft Windows这样的环境中。Windows 编程中用到的变量(还包括宏)的命名规则为匈牙利命名法,这种命名技术是由一位能干的Microsoft 程序员查尔斯-西蒙尼(Charles Simonyi) 提出的。 匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等。这些符号可以多个同时使用,顺序是先m_(成员变量)、再指针、再简单数据类型、再其它。这样做的好处在于能增加程序的可读性,便于对程序的理解和维护。 例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。 匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。 (3)帕斯卡(pascal)命名法。与驼峰命名法类似,二者的区别在于:驼峰命名法是首字母小写,而帕斯卡命名法是首字母大写,如: DisplayInfo();

C语言标识符命名规则(变量名和函数名)

C语言标识符命名规则(变量名和函数名) C语言变量和函数命名规范 2010年08月05日星期四20:18C语言变量和函数命名规范: 关于C语言变量和函数命名规范据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要化太多精力试图发明世界上最好的命据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。 1.共性规则 本节论述的共性规则是被大多数程序员采纳的,我们应当在遵循这些共性规则的前提下,再扩充特定的规则,如3.2节。 【规则1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。 标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成

NowValue。 【规则1-2】标识符的长度应当符合“min-length && max-information”原则。 几十年前老ANSI C规定名字不准超过6个字符,现今的C++/C不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长约好?不见得! 例如变量名maxval 就比maxValueUntilOverflow好用。单字符的名字也是有用的,常见的如i,j,k,m,n,x,y,z等,它们通常可用作函数内的局部变量。 【规则1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。 例如Windows应用程序的标识符通常采用“大小写”混排的方式,如AddChild。而Unix应用程序的标识符通常采用“小写加下划线”的方式,如add_child。别把这两类风格混在一起用。 【规则1-4】程序中不要出现仅靠大小写区分的相似的标识符。 例如: int x,X;// 变量x 与X 容易混淆 void foo(int x);// 函数foo 与FOO容易混淆 void FOO(float x);

C语言编码规范

C语言编码规范

文档修改记录 版本版本日期说明编写者审核者V0.1吕晓敏

1排版规则 1)程序应采用缩进风格编写,每层缩进使用一个制表位(TAB),类定义、方法都应顶 格书写; 2)源程序建议使用英文书写,尽量不含有中文。每行不超过80字符。对于较长的语 句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读;循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分; 3)左花括号要另起一行,不能跟在上一行的行末; 4)一个变量定义占一行,一个语句占一行; 5)对独立的程序块之间、变量说明之后必须加空行; 6)在结构成员赋值等情况,等号对齐,最少留一个空格; 7)若函数或过程中的参数较长,则要进行适当的划分。 8)形参的排序风格: 最常使用的参数放在第一位; 输入参数列表应放在输出参数列表的左边; 将通用的参数放在特殊的参数的左边。 2命名规范 2.1应用程序的命名 “系统简称”+模块名称 2.2子模块的命名 每个子模块的名字应该由描述模块功能的1-3以单词组成。每个单词的首字母应大写。在这些单词中可以使用一些较通用的缩写。 2.3变量的命名 变量的命名的基本原则是使得变量的含义能够从名字中直接理解。可以用多个英文单词拼写而成,每个英文单词的首字母要大写,其中英文单词有缩写的可用缩写;变量的前缀表示该变量的类型;对于作用域跨越10行以上的变量名称不能少于4个字符,除循环变量,累加变量外不得使用I、j、k等名称的变量。变量分为取全局变量和局部变量,对于全局变量以加前缀“g_”来区分。 使用有意义的英语单词,使用大小写分隔,每个单词的第一个字母为大写标识符种类书写规范示例 函数/过程名/变量一般标识符CheckButtonStates 宏标识符大写标识符SALES_TAX 类型定义‘T’+一般标识符TMyType 类标识符‘C’+一般标识符CEditBox 结构标识符‘S’+一般标识符SMyStructure 联合标识符‘U’+一般标识符UMyUnion

C语言格式书写要求规范

C语言书写规指南 第1章文件结构 每个C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。 C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀。 1.1和版本的声明 和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要容有: (1)信息。 (2)文件名称,标识符,摘要。 (3)当前版本号,作者/修改者,完成日期。 (4)版本历史信息。 /* *Copyright(c)2001,大学物理学院无线电 *Allrightsreserved. * *文件名称:filename.h *文件标识: *摘要:简要描述本文件的容 * *当前版本:1.1 *作者:输入作者(或修改者)名字 *完成日期:2007年7月20日 * *取代版本:1.0

*原作者:输入原作者(或修改者)名字 *完成日期:2007年5月10日 */ 示例1-1和版本的声明 1.2头文件的结构 头文件由三部分容组成: (1)头文件开头处的和版本声明(参见示例1-1)。 (2)预处理块。 (3)函数和类结构声明等。 假设头文件名称为SCL_SPI.h,头文件的结构参见示例1-2。 【规则1-2-1】为了防止头文件被重复引用,应当用#ifndef/#define/#endif结构产生预处理块。 【规则1-2-2】用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 【规则1-2-3】用#include “filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。 【规则1-2-4】#include 后面使用TAB键控制排版。 【规则1-2-5】头文件中只存放“声明”而不存放“定义” 【规则1-2-6】全局变量在头文件中声明,在.c文件中定义 .h extern in tvalue; 声明。 .c in tvalue=0x10; 定义。 【规则1-2-7】局部变量在.c中定义(static)unsigned in tvalue; 定义。 //和版本声明见示例1-1,此处省略。

数据类型、变量的命名规则

1、整数类型: 默认情况下,C语言中声明的整型变量都使用有符号的,也就是说最左侧保留符号位,如果不需要使用符号位,则需要声明为unsigned类型。无符号整数主要用于系统编程和底层与机器相关的应用。 unsigned(无符号)和signed(有符号)可以修饰整型和浮点型和char类型;unsigned包括0和正数(没有负数),signed包括负数、0、正数。 在不同CPU位数的计算机上,各整数类型的取值范围如下表: 2、浮点类型 C语言中提供了三种浮点类型: float:单精度浮点数。适用于对精度没有太多要求的小数的表示; double:双精度浮点数。提供更精确的数据表示; long double:扩展精度浮点数。精度极高,使用机率很小;(了解) 浮点类型取值范围参考下表:

浮点常量说明: 浮点常量必须包含小数点或指数,其中指数指明了对前面的数进行缩放的10的幂次。默认情况下浮点常量以双精度形式存储,也就是说当C语言编译器遇到程序中的浮点常量时,会以double类型值将其存储于内存中,并且double类型值在需要时向float类型转化时也不会出现任何问题。某些情况下,为了明确地标识数值,或者强制编译器按照某种数据类型处理数值,我们需要显式地在数值之后增加标记,来明确常量的处理类型。例如:57.0F、57.0f等。 3、字符类型: 字符类型在内存中占1个字节的长度,字符变量可用任意单字符赋值,字符常量需要用单引号扩起。每一个字符在ASCII码表中都会对应一个十进制数值,C语言允许将字符作为整数来使用,并参与运算。 4、变量的命名规则: 变量名只可以由字母、数字、下滑线组成,除此之外不能包含其它特殊字符(如:控制字符、特殊符号等); 变量名必须以字母或者下划线开头; C语言中的保留字具有特殊意义,不能用作变量名称; C语言的变量名称区分大小写,例如:变量A与变量a是两个不同的变量。

相关主题