c語言define的用法
① c語言,#define語句的用法。
1.簡單的宏定義
格式:#define 標識符 替換列表
說明:替換列表可以是數,字元串字面量,標點符號,運算符,標識符,關鍵字,字元常量。
注意:替換列表是可以為空的
典型錯誤:
#defineN=100
inta[N];/*這樣會成為inta[=100],這里會處理成為一種標識記號一樣*/
#defineN100;
inta[N];/*帶分號的定義會成為inta[100;],這是一種很常見的錯誤*/
#definepin(int*);
pina,b;
int*a,b;/*本意是a和b都是int型指針,但是實際上變成int*a,b;a是int型指針,而b是int型變數。這是應該使用typedef來代替define,這樣a和b就都是int型指針了。*/
典型的使用方法:
使用宏定義可以自己根據自己的習慣來定義甚至改變C語言的語法習慣,例如:
#defineBEGIN{
#defineEND}
intmain()BEGIN
printf("DEFINE---- ");
END
定義一個循環
#defineLOOPfor(;;)
重新定義數據類型
#defineITint
2.帶參數的宏
#define 標識符(x1,x2,x3...xn) 替換列表 (注意:x1,x2,x3..是宏的參數,標識符和其左括弧之間不能有空格)
使用方法:
#defineMAX(x,y)((x)>(y)?(x):(y))
i=MAX(j+k,m-n);
替換為:
i=MAX((j+k)>(m-n)?(j+k):(m-n));
#defineSI_EX(n)((n)%2==0)
if(SI_EX(i))i++;
替換為:
if(SI_EX((i)%2==0))
通過以上例子可以看出,標識符帶參數(X1,X2,X3.....)在替換時會被替換列表(Y1,Y2,Y3....)對應的替換,但是和順序無關。
3.宏的特殊單行定義
#defineA(x)T_##x
#defineB(x)#@x
#defineC(x)#x
x=1
替換為:
A(1)------> T_1 (T_##x,##符號是記號粘黏符號,將前後的字元粘黏起來。)
B(1)------> '1' ( #@x , #@ 符號會將宏的參數進行字元串字面量化,並且加『』號)
C(1)------> "1" ( #x ,#符號會將宏的參數進行字元串字面量化,並且加""號)
4.define的多行定義
define可以替代多行的代碼,在每一個換行的時候加上一個""
#defineMAX(X,Y)do{
語句1;
語句2;
/*注釋的寫法*/
}while(0)/*(notrailing;)*/
5.在大規模的開發過程中,特別是跨平台和系統的軟體里,define最重要的功能是條件編譯。
#ifdefWINDOWS
......
......
#endif
#ifdefLINUX
......
......
#endif
可以在編譯的時候通過#define設置編譯環境
6.取消宏
#undef標識符
7.條件編譯
#ifdefXXX…(#else)…#endif
8.預定義宏
在C語言中收錄了一些有用的宏,這些宏是提供當前編譯信息的。
__LINE__ 被編譯文件的行數
(整型)
__FILE__ 被編譯文件的名字 (字元型)
__DATE__ 編譯日期 (字元型)
__TIME__ 編譯時間 (字元型)
__STDC__ 如果編譯器接受標准C,那麼值為1. (整型)
通常在編譯的時候可以用這些預定義的宏來進行排錯,例如:
一般情況下,當出現除零的情況時編譯器是沒有提示的,可以自定義一個解決辦法。
#defineCHECKZERO(divisor)
if(divisor==0)
printf("***ATTEMPTTODIVIDEBYZEROINLINE%doffile%s*** ",__LINE__,__FILE__);
引用方法
CHECKZERO(j);
k=i/j;
② C語言中define的用法是什麼
#define PAI 3等於將接下來代碼中的所有PAI替換成3,下面一行就被替換成了int yzc(3, int a),而3不是一個合法的形參變數聲明,故報錯。
③ 關於C語言中#define的用法
你用的是VC6.0哈。
可能是VC6.0不支持
#define TEST
這種定義宏的方式吧。
建議直接在TEST後面加個 0,也就是這樣定義宏
#define TEST 0
反正VS2005以上的編譯器都支持你這種TEST後面沒有內容的宏定義。
順便吐槽下,Printf("yes\n"); //這個地方,P應該是小寫吧。
④ C語言中關於#define的使用
編譯錯誤...
是不是寫錯了
//#define(A,B)
((A)<=(b)?(A):(B))
#define
MIN(A,B)
((A)<=(b)?(A):(B))//這樣的?
-------------
換後
是
((*p++)<=(b)?
(*p++):(b))
比較*p和b,然後p指向後一個元素
如果真,顯示*p,
p在指向後一個元素
假的話,
只顯示b
⑤ C語言中#define是什麼意思
是定義的意思,將一個變數強制定義為你想要的值。如#define PI 3.14就是將PI的值定義成3.14,這樣在程序里看到PI就可以替換成3.14了。
⑥ C語言中define的用法,具體看圖
bool型和char型雖然都是佔一個位元組,但是是不一樣的兩個類型。bool只有0和1兩個值,但是char型的范圍是-256~255.char型是基本型,bool型由於不是基本型,你這樣定義是沒有問題的,如果導入別的頭文件包含bool的定義,就會產生沖頂以錯誤。「\x1」表示是1 x表示是16進制的數字,及0x0001的一種表示方法。
#define bool char表示把bool定義成char型。
#define true 1 可以理解為 true=1;
⑦ c語言 define 怎麼用的
有三種用法,例如替代多行的代碼、條件編譯,還有典型的宏定義,具體如下:
1、define最重要的用法是條件編譯
#ifdef WINDOWS
......
......
#endif
#ifdef LINUX
......
......
#endif
可以在編譯的時候通過#define設置編譯環境
2、典型的使用方法
使用宏定義我們可以自己根據自己的習慣來定義甚至改變C語言的語法習慣,例如:
#define BEGIN {
#define END }
int main()BEGIN
printf ("DEFINE---- ");
定義一個循環
#define LOOP for(;;)
重新定義數據類型
#define IT int
3、define可以替代多行的代碼,在每一個換行的時候加上一個""
#define MAX(X,Y) do {
語句1;
語句2;
/* 注釋的寫法 */
} while(0) /* (no trailing ; ) */
(7)c語言define的用法擴展閱讀:
關於上述中用 #define 定義標識符的一般形式為:
1、#define 標識符常量 //注意, 最後沒有分號
2、#define 和 #include 一樣,也是以「#」開頭的,凡是以「#」開頭的均為預處理指令,#define也不例外。
3、#define又稱宏定義,標識符為所定義的宏名,簡稱宏,標識符的命名規則與前面講的變數的命名規則是一樣的。
4、#define 的功能是將標識符定義為其後的常量,一經定義,程序中就可以直接用標識符來表示這個常量。
⑧ c語言define用法
1、#ifdef:
如果有定義的#ifdef的一般形式為:#ifdef 宏替換名 語句段 #endif
含義為:如果宏替換名已被定義過,則對「語句段」進行編譯;如果未定義#ifdef後面的宏替換名,則不對語句段進行編譯。
2、#ifndef:
如果無定義的#ifndef的一般形式為:#ifndef 宏替換名 語句段 #endif
含義為:如果未定義#ifndef後面的宏替換名,則對「語句段1」進行編譯;如果定義#ifndef後面的宏替換名,則不執行語句段。
3、#undef:
#undef命令可以刪除事先定義了的宏定義。
#undef命令的一般形式如下:#undef 宏替換名
(8)c語言define的用法擴展閱讀:
c語言中define作為英文單詞的含義:
define是一個英語單詞,動詞、名詞,作動詞時意為「 定義;使明確;規定」,作名詞時意為 「(Define)人名;(英)德法恩;(葡)德菲內」。
短語搭配:
flow define流程定義
Define Mask定義罩框 ; 界說罩框
define byte[計]定義位元組 ; 定義位元組指令 ; 偽指令 ; 位元組定義
⑨ c語言 #define的用法
#if(x==1) C語言有這樣寫法嗎???
另外,你說X值從屏幕輸入不可以的,因為你就沒定義怎麼可能接收外部值,把你的邏輯想清楚.
⑩ C語言中的#define是什麼意思,有什麼作用,怎樣用
#define 定義一個標識符來表示一個常量。
其特點是定義的標識符不佔內存,只是一個臨時的符號,預編譯後這個符號就不存在了。
用 #define 定義標識符的一般形式為:
#define 標識符 常量 //注意, 最後沒有分號
#define 和 #include 一樣,也是以「#」開頭的。凡是以「#」開頭的均為預處理指令,#define也不例外。
(10)c語言define的用法擴展閱讀:
宏定義 #define 一般都寫在函數外面,與 #include 寫在一起。當然,寫在函數裡面也沒有語法錯誤,但通常不那麼寫。#define 的作用域為自 #define 那一行起到源程序結束。如果要終止其作用域可以使用 #undef 命令。
使用宏定義可以用宏代替一個在程序中經常使用的常量。注意,是「經常」使用的。這樣,當需要改變這個常量的值時,就不需要對整個程序一個一個進行修改,只需修改宏定義中的常量即可。
且當常量比較長時,使用宏就可以用較短的有意義的標識符來代替它,這樣編程的時候就會更方便,不容易出錯。因此,宏定義的優點就是方便和易於維護。