常量命名

你说的命名常量和符号常量应该是用const和define宏的意思
const表示常量,它会在数据区开辟一个空间用来存储这个常量,但是这个常量只读,不可写。
用define宏只表示代码代换,在预编译的时候遇到define的时候会把它转换成相应的值,然后再汇编到指令中去,所以用宏一般会把最后处理得到的值会写入指令,用立即数寻址的方式在指令空间里面
这是它们本质上的区别,还有就是其他程序要访问这个常量,const常量要用extern声明,表示这个常量是其他数据空间的,在连接的时候会处理。
如果是宏的话就必须要包含这个宏定义的头文件,这个是在预编译的时候处理的

常量只有四类:整型常量,浮点常量,枚举常量 和 字符常量。
每类都有自己的一点规定,这个说起来比较扯,但记起来很容易:

整型常量有三类:十、八、十六进制常量。
    十进制的是指:非零数字起始的数字序列。
    八进制:0起始的八进制数字序列。八进制数字是指 0-7 这八个数字
    十六是:0x 或 0X 起始的十六进制数字序列。十六进制数字是指 0-9 a-f A-F 这些。
    以上三类都可以追加整型后缀u, U, l, L, ll, LL 用以分别表示常量是 usigned, long, long-long 类型。

浮点也有两类:一类是十进制浮点常量,另一个是十六进制浮点常量(这个不是很常用)。
    十进制的有两种上表示方法:
        一种借助小数点的:d.d    .d    d.    这三种形式。其中的 d 是数字序列的意思。
        一种不用小数点,就必须给出指数部分(就是用科学记数法)。
        即使使用第一种方法,后面也可以再根指数部分,就是加个 e 或者 E 再可选地加一个正负号,再数字序列。
    十六进制的,大体上差不多,但不管你前面有没有小数点,后面的指数部分都必须给出。用 p 或 P 代替 e E。
    所有类型都可以加后缀 f F l L。

枚举的一般不会考试出的,我想。它的语法也相对简单,就是加个 const 。我就不多说了。

字符的其实最复杂。
    简单的说就是用 '' 把数个(*见我后面的解释)字符括起来。比如 'a'。它也有两类,一个是所谓的普通字符常量。另一个(如果是应试的话其实可以无视),是宽字符常量,区别就是前面给个缀L,比如 L'a'。
    但是它有一些转义的规则。使得用文字描述起来超吃力,初学者也容易迷糊。
        转义规则有三类:简单转义,八进制转义 和 十六进制转义。
        简单转义就是指  \'  \"  \?  \\  \a \b \f \n \r \t \v 这么固定的几个。
        八进制是指 \ 后跟一至三个八进制数的形式,如 \1  \12  \ 123
        十六进制是指 \x 后跟一个以上十六进制数字的形式,如 \xa \x123abc 这样的。但限制是追加的值不能超过 unsigned char 或者 wchar_t 表示的上限。
    在语义上,一个字符常量的类型是 int 。

    现在说一下另一个问题是诸如 'xy' 这种东西。在语法上(ISO/IEC 9899:1999 中规定),它确实也是一个合法的字符常量。它是意义是由实现定义(不是未定义,而是未明确)。这个如果是考试的话,就不要较真了,认为是非法字符就行。
posted @ 2013-08-17 16:05  herizai007  阅读(528)  评论(0编辑  收藏  举报