c語言宏的作用
Ⅰ c語言中「宏」是個什麼東西 有什麼意義
宏定義的作用在預編譯階段,形如 #define A B 就是宏定義了,作用就是在預編譯階段將程序中回的A全部視為B,舉個例子:答
我們在程序最開始,聲明如下宏定義
#define pi 3.1415926
那麼在我們寫程序的時候,我們可以直接使用pi作為一個常量來使用,那麼當我們編譯程序的時候,編譯器會自動將程序中出現的pi替換成3.1415926
第二個例子,利用宏定義定義傻瓜函數
#define mul(A,B) A*B
那麼我們可以將mul()在程序中當成函數來使用,為什麼叫做傻瓜函數一會來解釋,使用方法
mul(3,5) 那麼這段代碼就相當於計算3*5=15
那麼當我們如下使用時就會出現問題
mul(3+2,3) 我們期待的結果是15,而實際結果是9,為什麼呢?因為在程序會如下轉換
3+2*3=3+6=9 這也就是為什麼我們管宏定義出來的函數叫傻瓜函數的原因了~~~
樓主呀~~~完全手寫,一定要好評呀!^_^
Ⅱ c語言宏定義作用區域
就是預編譯,所以在當前文件有效,無法使用其他源文件里定義的宏。
如果在頭文件定義,那麼所有引用該頭文件的源文件,預編譯後都會有這個宏,因此兩個源文件同時定義不會沖突。
不過一般宏定義在頭文件里的多,這時候需要使用#ifndef來避免重復引入,導致宏重復定義的警告。
Ⅲ C語言中的一個宏的作用
就是變長參數宏
http://blog.csdn.net/tonggetongge/article/details/6007510
Ⅳ 在C語言中"宏"是什麼意思
簡單來抄說:宏定義襲又稱為宏代換、宏替換,簡稱「宏」。是C提供的三種預處理功能的其中一種。
說明:
1、宏名一般用大寫
2、使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
3、預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
4、宏定義末尾不加分號;
5、宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
6、可以用#undef命令終止宏定義的作用域
7、宏定義可以嵌套
8、字元串" "中永遠不包含宏
9、宏定義不分配內存,變數定義分配內存。
Ⅳ c語言宏定義如何用用宏定義有什麼優點
宏定義
宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
編輯本段1.不帶參數的宏定義:
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
編輯本段2.帶參數的宏定義:
除了一般的字元串替換,還要做參數代換
格式:
#define 宏名(參數表) 字元串
例如:#define S(a,b) a*b
area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
類似於函數調用,有一個啞實結合的過程:
(1)實參如果是表達式容易出問題
#define S(r) r*r
area=S(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;
正確的宏定義是#define S(r) ((r)*(r))
(2)宏名和參數的括弧間不能有空格
(3)宏替換只作替換,不做計算,不做表達式求解
(4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存
(5)宏的啞實結合不存在類型,也沒有類型轉換。
(6)函數只有一個返回值,利用宏則可以設法得到多個值
(7)宏展開使源程序變長,函數調用不會
(8)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值
C語言宏定義技巧(常用宏定義)
寫好C語言,漂亮的宏定義很重要,使用宏定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟體中常用得宏定義。。。。。。
Ⅵ C語言中的宏
C語言中來的宏定義的字自是:define
C語言中的define宏定義有帶參數的和不帶參數兩中形式
不帶參格式是:#define 宏名 字元串
帶參格式是:#define 宏名(參數1,參數2,...) 字元串
在C語言里宏定義只用來做的宏名替換,而不做語法檢查的,因而它不是C語句,所以在宏定義的時候不需要在後面加";"
宏也在C里也叫預處理命令,因為宏是在程序編譯前先進行字元替換的,所以叫預處理.在C里還有其它的預處理命令如:
#define
#undef
#ifdef
等等
Ⅶ 單片機C語言的宏定義有什麼作用!!
跟單片機沒關系,這是C語言的東西
-------------
#是C語言里的預處理命令,編譯器在編譯代碼之前,會預先處理這部分內容,#define 就是宏定義,對於 #define 的內容是怎樣處理的呢?看下面的代碼
#define MAX 128
void main()
{
int max=MAX;
}
編譯器處理時,會直接把 int max=MAX;替換成 int max=128; 注意,是文本替換,而不是變數賦值,程序中自始至終都不存在MAX這個變數,相當於是用「查找-替換」功能一樣,查找 MAX ,替換成 128 。
如果程序中有多個地方要用到同一個值、代碼塊,我們都可以定義成一個宏,如果這些值或代碼塊要改動,只需改下宏定義就行了,不用從代碼中一處一處的改,很方便,而且不會因為漏掉某個地方而導致程序出錯。
Ⅷ 在C語言中「宏是什麼意思」
定義的抄意思
在C語言中的宏定義就是定義外部變數 內部函數使用exiterm來調用
如:exiterm char c1,c2;
C語言中的宏定義的字是:define
C語言中的define宏定義有帶參數的和不帶參數兩中形式
不帶參格式是:#define 宏名 字元串
帶參格式是:#define 宏名(參數1,參數2,...) 字元串
在C語言里宏定義只用來做的宏名替換,而不做語法檢查的,因而它不是C語句,所以在宏定義的時候不需要在後面加";"
宏也在C里也叫預處理命令,因為宏是在程序編譯前先進行字元替換的,所以叫預處理.在C里還有其它的預處理命令如:
#define
#undef
#ifdef
等等
Ⅸ 急!!!在線等!!C語言宏定義的作用
#是C語言里的預處理命令,編譯器在編譯代碼之前,會預先處理這部分內容,專#define 就是宏定義,對於 #define 的內容是怎樣處理屬的呢?看下面的代碼
#define MAX 128
void main()
{
int max=MAX;
}
編譯器處理時,會直接把 int max=MAX;替換成 int max=128; 注意,是文本替換,而不是變數賦值,程序中自始至終都不存在MAX這個變數,相當於是用「查找-替換」功能一樣,查找 MAX ,替換成 128 。
如果程序中有多個地方要用到同一個值、代碼塊,我們都可以定義成一個宏,如果這些值或代碼塊要改動,只需改下宏定義就行了,不用從代碼中一處一處的改,很方便,而且不會因為漏掉某個地方而導致程序出錯。
Ⅹ C語言多個源程序宏定義的作用范圍
宏定義分類:
(1)不帶參數的宏定義
形式: #define 宏名 [宏體]
功能:可以實現用宏體代替宏名
使用實例: #define TRUE 1
作用:程序中多次使用TRUE,如果需要對TRUE的值進行修改,只需改動一處就可以了
(2)帶參數的宏: #define 宏名 ( 參數表) [宏體]
宏定義作用:
(1)方便程序的修改
上面的#define TRUE 1就是一個實例
(2)提高程序的運行效率
宏定義的展開是在程序的預處理階段完成的,無需運行時分配內存,能夠部分實現函數的功能,卻沒有函數調用的壓棧、彈棧開銷,效率較高
(3)增強可讀性
這點不言而喻,當我們看到類似PI這樣的宏定義時,自然可以想到它對應的是圓周率常量
(4)字元串拼接
例如:
#define CAT(a,b,c) a##b##c
main()
{
printf("%d\n" CAT(1,2,3));
printf("%s\n", CAT('a', 'b', 'c');
}
程序的輸出會是:
123
abc
(5)參數轉化成字元串
示例:
#defind CAT(n) "abc"#n
main()
{
printf("%s\n", CAT(15));
}
輸出的結果會是
abc15
(6)用於程序調試跟蹤
常見的用於調試的宏有,_ L I N E _,_ F I L E _,_ D A T E _,_ T I M E _,_ S T D C _
(7)實現可變宏
舉例來說:
#define PR(...) printf(_ _VA_ARGS_ _)