⑴ C語言中用宏定義(define)表示數據類型和用typedef定義類型有什麼區別
typedef 是定義 一個名字的別名,別名等價於原名。原名仍存在,仍起作用。
#define 是宏,預編譯命令,在正式編譯前作 字元串 替代,替代完畢再編譯。原來的字元串不再存在,不再起作用。
⑵ 什麼是宏定義
宏定義是高級語言編譯器提供的常用語法,其目的是利用某一標識符標識某個文本字元串。在編寫程序時,如果程序中反復地使用某個數據或某段程序片段,就可以考慮將這個數據或程序片段定義為宏,然後每個出現該數據或程序片段的地方用宏名替代
選擇宏定義來做的好處是程序簡潔,可讀性好,而且當需要修改這些相同的程序片段時,只要修改宏定義中的字元串即可,不需要修改多處。
(2)宏定義編譯後的類型擴展閱讀:
參宏定義中#的用法:
#defineSTR(str) #str
#用於把宏定義中的參數兩端加上字元串的""
比如,這里STR(my#name)會被替換成"my#name",一般由任意字元都可以做形參,但以下情況會出錯:
STR())這樣,編譯器不會把")"當成STR()的參數。STR(,)同上,編譯器不會把","當成STR的參數。STR(A,B)如果實參過多,則編譯器會把多餘的參數捨去。
(VC++2008為例)STR((A,B))會被解讀為實參為:(A,B),而不是被解讀為兩個實參,第一個是(A第二個是B)。
⑶ c++宏定義的 屬於什麼數據類型
C++宏定義本身沒類型
#DEFINE
NUM
10000
...
int
a=NUM;
會被預編譯成
int
a=10000;
在這里NUM應該是int類型
宏本質上就是預編譯階段的「替換規則」
⑷ c語言中宏名是什麼類型
宏名有可能是類型,也有可能是函數,要看宏的定義。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
宏名一般用大寫。
使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義。
⑸ c語言中宏名是什麼類型
宏名有可能是類型,也有可能是函數,要看宏的定義。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。
⑹ 在C語言中 宏定義是什麼
在C語言源程序中,允許用一個標識符來表示一個字元串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預處理程序自動完成的。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯。
宏(Macro),是一種批量處理的稱謂。計算機科學里的宏是一種抽象,它根據一系列預定義的規則替換一定的文本模式。
計算機語言如C語言或匯編語言有簡單的宏系統,由編譯器或匯編器的預處理器實現。C語言的宏預處理器的工作只是簡單的文本搜索和替換,使用附加的文本處理語言如M4,C程序員可以獲得更精巧的宏。
⑺ c++宏定義的 屬於什麼數據類型
C++宏定義本身沒類型
#DEFINE NUM 10000
...
int a=NUM;
會被預編譯成
int a=10000;
在這里NUM應該是int類型
宏本質上就是預編譯階段的「替換規則」
⑻ C語言,宏名有類型,其參數也有類型對嘛判斷
C語言中,宏名沒有類型,其參數也沒有類型。
宏不存在類型問題,宏名無類型,它的參數也無類型,只是一個符號代表,展開時代入指定的字元串即可。宏定義時,字元串可以是任意類型的數據。
在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字元串去代換。
(8)宏定義編譯後的類型擴展閱讀
帶參宏注意事項:
1、宏名和形參表的括弧間不能有空格。
2、宏替換只作替換,不做計算,不做表達式求解。
3、函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存。
4、函數只有一個返回值,利用宏則可以設法得到多個值。
5、宏展開使源程序變長,函數調用不會。
6、宏展開不佔用運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。
7、為防止無限制遞歸展開,當宏調用自身時,不再繼續展開。 如:#define TEST(x) (x + TEST(x))被展開為1 + TEST(1)。
⑼ c語言中宏名是什麼類型
宏名有可能是類型,也有可能是函數,要看宏的定義。宏定義是C提供的三種預處理功能的其中一種,這三種預處理包括:宏定義、文件包含、條件編譯
宏定義又稱為宏代換、宏替換,簡稱「宏」。
格式:
#define 標識符 字元串
其中的標識符就是所謂的符號常量,也稱為「宏名」。
預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。
掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例:
#define PI 3.1415926
把程序中出現的PI全部換成3.1415926
說明:
(1)宏名一般用大寫
(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)宏定義末尾不加分號;
(5)宏定義寫在函數的花括弧外邊,作用域為其後的程序,通常在文件的最開頭。
(6)可以用#undef命令終止宏定義的作用域
(7)宏定義不可以嵌套
(8)字元串" "中永遠不包含宏
(9)宏定義不分配內存,變數定義分配內存。
(10)宏定義不存在類型問題,它的參數也是無類型的。
⑽ 宏定義的格式
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)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)