日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言-typedef与#define的区别

發布時間:2025/6/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言-typedef与#define的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 1 typedef
    • 1.1 將復雜的聲明簡單化
    • 1.2 定義平臺無關的類型
    • 1.3 與struct的結合使用
    • 1.4 typedef使用公式
  • 2 typedef與#define的區別
    • 2.1 執行時間不同
    • 2.2 功能有差異
    • 2.3 作用域不同
    • 2.4 對指針的操作

1 typedef

1.1 將復雜的聲明簡單化

聲明了一個返回bool類型并帶有兩個(int和double)形參的函數的指針類型FuncPointer

typedef bool (*FuncPointer)(int, double);

聲明了一個FuncPointer類型的函數指針對象pFunc

FuncPointer pFunc;

1.2 定義平臺無關的類型

定義與平臺無關的類型,屏蔽不同平臺的類型差異化
比如定義一個叫 REAL的浮點類型,在目標平臺一上,讓它表示最高精度的類型為:

typedef long double REAL;

在不支持 long double 的平臺二上,改為:

typedef double REAL;

在連 double 都不支持的平臺三上,改為:

typedef float REAL;

也就是說,當跨平臺時,只要改下typedef本身就行,不用對其他源碼做任何修改。

1.3 與struct的結合使用

typedef struct __Person {string name;int age;float height; } Person; //這是Person是結構體的一個別名 Person person;

1.4 typedef使用公式

  • 先按定義變量的方法寫出定義體,如int i;
  • 將變量名換成新類型名,如將i換成Count
  • 在最前面加上typedef,如typedef int Count
  • 然后可以使用新類型名去定義變量
  • 2 typedef與#define的區別

    2.1 執行時間不同

    • 關鍵字typedef在編譯階段有效,由于是在編譯階段,因此typedef有類型檢查的功能
    • #define則是宏定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字符串替換,而不進行任何檢查

    2.2 功能有差異

    • typedef用來定義類型的別名,定義與平臺無關的數據類型,與struct的結合使用等
    • #define不只是可以為類型取別名,還可以定義常量、變量、編譯開關等

    2.3 作用域不同

    • #define沒有作用域的限制,只要是之前預定義過的宏,在以后的程序中都可以使用
    • 而typedef有自己的作用域

    2.4 對指針的操作

    二者修飾指針類型時,作用不同,如

    #define POINTER int* // #define 定義int*為POINTER typedef int* pointer; // typedef 定義int*為pointer

    當使用他們定義多個變量時,由于兩者實現的形式有所不同,效果也不同,如

    pointer p1, p2; POINTER p3, p4; int a = 4; p1 = &a; // 正確,p1為指針,將a地址賦值給p1 p2 = &a; // 正確,p2為指針,將a地址賦值給p1 p3 = &a; // 正確,p3為指針,將a地址賦值給p1 p4 = &a; // 錯誤,p4為int型變量

    總結

    以上是生活随笔為你收集整理的C语言-typedef与#define的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。