?? 11.學c51的基礎 11《 枚 舉(enum) 》.txt
字號:
========================================================
詳細內容十一:學C51的基礎---- 枚舉(enum),類型說明,預處理
========================================================
枚舉(enum)
枚舉是一個被命名的整型常數的集合, 枚舉在日常生活中很常見。
例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 就是一個枚舉。
枚舉的說明與結構和聯合相似, 其形式為:
enum 枚舉名{
標識符[=整型常數],
標識符[=整型常數],
...
標識符[=整型常數],
} 枚舉變量;
如果枚舉沒有初始化, 即省掉"=整型常數"時, 則從第一個標識符開始, 順次賦給標識符0, 1, 2,...。但當枚舉中的某個成員
賦值后, 其后的成員按依次加1的規則確定其值。
例如下列枚舉說明后, x1, x2, x3, x4的值分別為0, 1, 2, 3。
enum string{x1, x2, x3, x4}x;
當定義改變成:
enum string
{
x1,
x2=0,
x3=50,
x4,
}x;
則x1=0, x2=0, x3=50, x4=51
注意:
1. 枚舉中每個成員(標識符)結束符是",", 不是";", 最后一個成員可省略","。
2. 初始化時可以賦負數, 以后的標識符仍依次加1。
3. 枚舉變量只能取枚舉說明結構中的某個標識符常量。
例如:
enum string
{
x1=5,
x2,
x3,
x4,
};
enum strig x=x3;
此時, 枚舉變量x實際上是7。
類型說明
類型說明的格式為:
typedef 類型 定義名;
類型說明只定義了一個數據類型的新名字而不是定義一種新的數據類型。這里類型是Turbo C許可的任何一種數據類型。定義名
表示這個類型的新名字。
例如: 用下面語句定義整型數的新名字:
typedef int SIGNED_INT;
使用說明后, SIGNED_INT就成為int的同義詞了, 此時可以用SIGNED_INT 定義整型變量。
例如: SIGNED_INT i, j;(與int i, j等效)。
但 long SIGNED_INT i, j; 是非法的。
typedef同樣可用來說明結構、聯合以及枚舉。
說明一個結構的格式為:
typedef struct{
數據類型 成員名;
數據類型 成員名;
...
} 結構名;
此時可直接用結構名定義結構變量了。例如:
typedef struct{
char name[8];
int class;
char subclass[6];
float math, phys, chem, engl, biol;
} student;
student Liuqi;
則Liuqi被定義為結構數組和結構指針。
在第二節講過的文件操作中, 用到的FILE就是一個已被說明的結構, 其說明如下:
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
} FILE
這個結構說明已包含在stdio.h中, 用戶只要直接用FILE 定義文件指針變量就可以。事實上, 引入類型說明的目的并非為了方
便, 而是為了便于程序的移植。
處理指令
由ANSI的標準規定, 預處理指令主要包括:
#define
#error
#if
#else
#elif
#endif
#ifdef
#ifndef
#undef
#line
#pragma
由上述指令可以看出, 每個預處理指令均帶有符號"#"。下面只介紹一些常用指令。
1. #define 指令
#define指令是一個宏定義指令, 定義的一般形式是:
#define 宏替換名字符串(或數值)
由#define指令定義后, 在程序中每次遇到該宏替換名時就用所定義的字符串(或數值)代替它。
例如: 可用下面語句定義TRUE表示數值1, FALSE表示0。
#define TRUE 1
#define FALSE 0
一旦在源程序中使用了TRUE和FALSE, 編譯時會自動的用1和0代替。
注意:
1. 在宏定義語名后沒有";"
2. 在Turbo C程序中習慣上用大寫字符作為宏替換名, 而且常放在程序開頭。
3. 宏定義還有一個特點, 就是宏替換名可以帶有形式參數, 在程序中用到時, 實際參數會代替這些形式參數。
例如:
#define MAX(x, y) (x>y)?x:y
main()
{
int i=10, j=15;
printf("The Maxmum is %d", MAX(i, j);
}
上例宏定義語句的含義是用宏替換名MAX(x, y)代替x, y中較大者, 同樣也可定義:
#define MIN(x, y) (x
程序也允許嵌入其它文件, 例如:
main()
{
#include
}
其中help.c為另一個文件, 內容可為
printf("Glad to meet you here!");
上例編譯時將按集成開發環境的Options/Directories/Include directories 中指定的包含文件路徑查找被嵌入文件。
4. #if、#else、#endif指令
#if、#els和#endif指令為條件編擇指令, 它的一般形式為:
#if 常數表達式
語句段;
#else
語句段;
#endif
上述結構的含義是: 若#if指令后的常數表達式為真, 則編譯 #if到 #else 之間的程序段; 否則編譯 #else 到 #endif 之間的
程序段。
例如:
#define MAX 200 //定義常量 MAX=200
main()
{
#if MAX>999
printf("compiled for bigger\n");
#else
printf("compiled for small\n");
#endif
}
5. #undef指令
#undef指令用來刪除事先定義的宏定義, 其一般形式為:
#undef 宏替換名
例如:
#define TRUE 1
...
#undef TURE
#undef主要用來使宏替換名只限定在需要使用它們的程序段中。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -