C語言如何定義宏
A. 請問c語言中宏定義怎麼用
宏定義就好像是WORD中的「全部替換」一樣,只不過這個替換是在將源程序在系統「編譯」時執行的。
舉例說:
#define sub(a,b) ((a)-(b))
源程序中若有
x=sub(200-1,100+10);
會被編譯為:
x=((200-1)-(100+10));
即x被賦值為89
如果#define sub(a,b) a-b的話
x=sub(200-1,100+10);
就變成x=200-1-100+10;
x會被賦值為109
B. C語言宏定義
宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。
這樣可以么?
C. c語言宏定義
宏定義又稱為宏替換,C語言中的宏定義只是簡單的字元串替換而已。
比如
define
N
1000
在程序中遇到N就自動把N替換成1000,N不是一個變數,不能賦值。
如果你寫N=1;
相當於寫1000=1;
這編譯是通不過的,所以你使N的值改變是做不到的。
N只是一個要被替換的記號而已,連變數也不是。
D. 在C語言中 宏定義是什麼
在C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
(4)C語言如何定義宏擴展閱讀:
宏(Macro),是一種批量處理的稱謂。計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。
計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。
E. C語言 宏的定義
宏定義類似 #define size 50
在用的時候size就代表50
F. c語言宏定義如何用用宏定義有什麼優點
用#define 來定義,如#define Max 100
優點:在以後的程序中 要修改Max的大小 不用跑到程序中找 直接修改
#define Max 的大小即可。很方便。
G. C語言宏定義
這個問題描述的不夠詳細。
宏定義中有一個很重要的事情就是要給參數加上括弧,否則就有可能影響最終的結果。
因為宏只是簡單的字元替換。
如:
#defineTIME_TWO(n)(n*2)
//當你參數是單一值是,看起來無影響,比如
TIME_TWO(3)
//會被正確的替換為如下,結果為6
(3*2)
//但如果你的參數本身就是一個表達式,比如
TIME_TWO(3+2)
//那麼就會被替換為如下,結果為7,不符合預期
(3+2*2)
//所以宏定義中需要包裹參數防止優先順序影響結果
#defineTIME_TWO_PREFECT(n)((n)*2)
//同樣調用
TIME_TWO_PREFECT(3+2)
//就會被正確的替換為如下,結果為10,符合預期
((3+2)*2)
H. C語言中的宏定義如何使用
正確的完整輸出 3 個整數的程序結構應該按照如下寫法:
#define N 3
#include <stdio.h>
int main( )
{
int i, a[N] = { 1, 2, 3 } ;
for(i = 0 ; i < N ; i ++ ) /* 循環輸出整數數組 a 中的 3 個數字,特別要注意:i 必須要寫成:i < N,而不能夠寫成:i <= N,否則的話,就會產生越界錯誤。 */
printf("%d\t", a[i] ) ;
printf("\n" );
return 0 ;
}
由於 C 語言的數組下標是從 0 開始的,而不是像 PASCAL 語言那樣是從 1 開始的。故
你原來的程序語句中:
#define N 3
printf("%d", a[N]) ; 用 N = 3 替換 a[N],就變成了:printf("%d", a[3]) ; 那就肯定越界了。
I. C語言宏定義
樓主看看書,仔細看看編譯預處理都做了哪些事情。
程序設計語言的預處理的概念:在編譯之前進行的處理。 C語言的預處理主要有三個方面的內容: 1.宏定義; 2.文件包含; 3.條件編譯。 預處理命令以符號「#」開頭。
宏定義又稱為宏代換、宏替換,簡稱「宏」。預處理製作單純的宏展開,並不是檢查語法錯誤,所說義是錯誤的。
語法錯誤都是編譯階段才檢查的。預處理是不檢查的。
J. c語言的宏定義有哪些技巧
(一)宏定義中的##
連接符與#
符
##
連接符號由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串(token)聯接起來,從而形成一個新的子串。但它不可以是第一個或者最後一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理里有詳盡的解釋,但不知道也無所謂。同時值得注意的是#符是把傳遞過來的參數當成字元串進行替代。下面來看看它們是怎樣工作的。這是msdn上的一個例子。
假設程序中已經定義了這樣一個帶參數的宏:
#define
paster(
n
)
printf(
"token"
#n
"
=
%d",
token##n
)
同時又定義了一個整形變數:
int
token9
=
9;
現在在主程序中以下面的方式調用這個宏:
paster(
9
);
那麼在編譯時,上面的這句話被擴展為:
printf(
"token"
"9"
"
=
%d",
token9
);
注意到在這個例子中,paster(9);中的這個」9」被原封不動的當成了一個字元串,與」token」連接在了一起,從而成為了token9。而#n也被」9」所替代。
可想而知,上面程序運行的結果就是在屏幕上列印出token9=9
(二)"\"與一個較長佔多行的宏
宏定義中允許包含兩行以上命令的情形,此時必須在最右邊加上"\"且該行"\"後不能再有任何字元,連注釋部分都不能有,下面的每行最後的一定要是"\","\"後面加一個空格都會報錯,更不能跟注釋。
#define
exchange(a,b)
{\
int
t;\
t=a;\
a=b;\
b=t;\
}