2.1. 標識符
11.標識符不能依賴於多於31個字符的意義。編譯器和鏈接器應該可以支持31個字符的外部標識符(R)
12.不同域名空間的標識符的名稱應該具有不同的拼寫,結構體成員除外(A)
2.2. 類型
13.基本的類型,char,int,short,long,double,和float不應該被使用。應該使用編譯器通過typedef定義的等價規定長度類型的名稱(A)
14.char類型應該聲明成unsigned char 或者是signed char(R)
char類型會根據不同的編譯器被默認爲unsigned char 或 signed char
15.浮點類型的使用應該遵循明確的浮點標準(A)
16.程序員不能使用任何潛在的位表示的浮點數(R)
例如在IEEE754中:
typedef struct {
unsigned int mantissa1;
unsigned int mantissa0:31;
unsigned int one:1;
unsigned int exponent:15;
unsigned int negative:1;
unsigned int empty:16;
} _longDouble; // 80 bits intel long double
typedef struct {
unsigned int mantissa1;
unsigned int mantissa0:20;
unsigned int exponent:11;
unsigned int sign:1;
} _Double; // 64 bit double
typedef struct {
unsigned int mantissa:23;
unsigned int exponent:8;
unsigned int sign:1;
} _Float; // 32 bit float
以及浮點向整型數的類型轉換。
17.採用typedef的名字不能被其它標識符使用(R)
例如:
typedef char mychar;
void mycall() {
char mychar; /* 與規則17發生衝突*/
}
2.3. 常數
18.數值常數應該添加後綴以表明類型(A)
void mycall()
{
unsigned long a = 65537; /* 與規則18衝突 */
unsigned long b = 65537UL; /* 可以 */
return;
}
19.八進制常數不運行使用,零是可以的(R)
void myCall() {
int code1= 07; /*與規則19衝突*/
int code2= 7; /*可以*/
int code3 = 00; /*可以*/
}