日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言-typedef与#define的区别

發布時間:2025/6/17 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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