1 .最簡單且最常見的define用法
#define n 100
編譯器在預處理程式時,會將程式中所有的n用100來替換,換言之,不同於const常量,define其實本質上對文字內容的替換。
下面是define和const的區別:define是巨集定義,程式在預處理階段將用define定義的內容進行了替換。因此在程式執行時,常量表中並沒有用define定義的常量,系統不為它分配記憶體。
而const定義的常量,在程式執行時,存在常量表中,且系統為它分配記憶體。
define定義的常量,預處理時只是直接進行了替換,因此在編譯時不能進行資料型別檢驗。
而const定義的常量,在編譯時進行嚴格的型別檢驗,可以避免出錯。
define定義表示式時要注意「邊緣效應」。
例如:
#define n 1+2
float a = n/2.0;
/*按照常規做法,可能會認為結果是3/2 = 1.5
但是實際上,結果應該為1+2/2.0 = 2.0
若想要實現3/2,則#define n (1+2)
即為避免邊緣效應,一定要加!括!號!
*/
2 .用define定義函式
舉個例子:
#include
#define pi 3.14
#define s(r) pi*r*r
int main(void)
結果:
3.14*1+2*1+2 = 3.14+2+2 = 7.14
重要的事情再說一遍:巨集其實就是乙個簡單的文字替換!
3 .不常用的define用法
#define conn(x,y) x##y
#define tochar(x) #@x
#define tostring(x) #x
x##y表示x連線y
- 比如: int n = conn(123,456);
- 結果: n=123456;
- char* str = conn(「asdf」, 「adf」);
- 結果: str = 「asdfadf」;
而#@x,其實就是給x加上單引號,結果返回乙個const char。
- 比如:char a = tochar(1);
- 結果:a=』1』;
做個越界試驗 char a = tochar(123);結果是a=』3』; 但是如果引數超過四個字元,編譯器就會報錯!至於#x,就是給x加上雙引號
4 .定義巨集和取消巨集
定義巨集使用#define
取消巨集定義使用#undef
C語言中 define用法總結
1.簡單的巨集定義 define 識別符號 替換列表 替換列表可以是數,字串字面量,標點符號,運算子,識別符號,關鍵字,字元常量。注意 替換列表是可以為空的 典型錯誤 define n 100 int a n 這樣會成為int a 100 這裡會處理成為一種標識記號一樣 define n 100 i...
C語言中define的用法總結
1.簡單的巨集定義 define 識別符號 替換列表 替換列表可以是數,字串字面量,標點符號,運算子,識別符號,關鍵字,字元常量。注意 替換列表是可以為空的 典型錯誤 define n 100 int a n 這樣會成為int a 100 這裡會處理成為一種標識記號一樣 define n 100 i...
define用法,C語言 define詳解
c語言中,可以用 define 定義乙個識別符號來表示乙個常量。其特點是 定義的識別符號不佔記憶體,只是乙個臨時的符號,預編譯後這個符號就不存在了。預編譯又叫預處理。預編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統自動完成的。用 define 定義識別符號的一般形式為 define ...