C語言巨集與typedef
阿新 • • 發佈:2019-02-19
typedef
typedef 是給某一個變數型別起別名,原來正統的變數型別名依然可以使用。但是typedef通常的用法是給自己定義的型別起別名。
typedef關鍵字:作用 給變數型別取別名。預處理之後不會被替換(巨集會被替換)。有作用域(巨集沒有作用域,全域性)。
typedef int tni;
typedef int *p;
p q;//(給int * 定義別名p int *q; == p q;)
C語言巨集
#include <stdio.h>
//預處理:
// 1.展開標頭檔案(如 展開 include <stdio.h>的內容)
// 2.巨集替換:本質就是發生在預處理的單純的字串替換,預處理巨集替換僅單純替換不進行任何操作
//巨集定義: 就是常量,陣列buffer。不以分號結尾
#define R 20
#define N(n) n*10
#define M int main(
//1. 宣告巨集函式的時候:給表示式加上括號,防止替換後在優先順序上出現運算錯誤!
//2. 巨集相對於函式的優勢:巨集對於函式實參的要求比較寬泛。
// 例如:同一個加法巨集函式,即可以用於兩個整型數求和,
// 也可用於兩個浮點型資料的求和,而函式要做到這一點的話必須要對函式的形參型別進行改動!
#define ADD(a,b) (a+b)
int add(int a,int b)
{
return a+b;
}
typedef int tni;//給型別起別名
M)
{
tni a = R;
int b= N(a);// int b = a*10;
printf("b=%d\n",b);
int c = add(10.0,10.5);
printf("c = %d\n",c);//輸出20,因為被強制轉換為int
float d = ADD(10.0,10.5);
printf("d = %f\n",d);//輸出20.5
int e = ADD(a,b)*ADD(a,b);
printf("e=%d\n",e);// int b = a*10;
return 0;
}