一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

typedef與#define有什么差異嗎

冬至配餃子 ? 來源:最后一個bug ? 作者:bug菌 ? 2022-08-11 14:34 ? 次閱讀

最近在開發(fā)中使用typedef的時候掉了一次坑,這里記錄一下同時分享給大家~

1、typedef與#define

大部分朋友在編寫代碼的時候都會把無符號類型、結(jié)構(gòu)體等等進(jìn)行"簡化",要么用宏定義進(jìn)行文本替換,要么就通過typedef來定義一個類型別名。

參考代碼:

pYYBAGL0oiKAF0AlAAB94J8Fr1A803.png

似乎在一般人眼里兩種方式并沒有什么區(qū)別,有些人習(xí)慣用宏,有些人習(xí)慣用typedef,甚至一套代碼中還出現(xiàn)兩種定義,不過使用typedef來兼容不同平臺的類型更加的專業(yè)。

兩者的區(qū)別其實還是很明顯的,只是大部分人在編碼的過程中沒有遇到兩者差異的情況,

那么這里就舉個例子:

參考代碼:

pYYBAGL0ojWAIYyfAACxDZDrVcM678.png

如果typedef與#define沒啥差異的話,那么測試代碼中的Var1與Var2使用方法應(yīng)該是一樣的,但當(dāng)我們使用var2進(jìn)行賦值則編譯不通過。

pYYBAGL0okeALeqiAAB-_jnV8V4600.png

編譯結(jié)果出來你應(yīng)該就明白了,typedef把整個int*作為了一個整體,與基本類型int,float等一樣,此時const修飾的是Var2變量,與int * const等價,其指針?biāo)赶虻牡刂窡o法改變,但內(nèi)容*Var的內(nèi)容可以進(jìn)行修改。

同樣還有一個類似且非常值得注意的地方:

參考代碼:

pYYBAGL0olqAKaiNAACU8LglwYI762.png

問題就處在pVar4的定義上,此時pVar4僅僅只是一個int類型而非int*類型,這也是宏定義所帶來的弊端。

這樣大家應(yīng)該對typedef定義的整體類型與#define定義的宏有了一個較好的理解了吧。

2、數(shù)組類型是typdef專屬?

順便問了一下同事:你覺得typedef還有與#define不同的地方嗎?他想了想,回答道 : typedef可以直接定義數(shù)組類型,而#define不能。他的回答也對,但是也不完全對:

參考代碼:

poYBAGL0onSAPD6gAAEL4i4ezEU399.png

因為宏定義無法像普通定義變量那樣:"類型變量"的形式,所以認(rèn)為同事的說法也算對,不過對于如上面代碼的宏定義來定義變量,其實也差別不大吧。

poYBAGL0ooWARUSBAAB0FqdAZz0370.png



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    965

    瀏覽量

    55356
  • typedef
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    9643
  • float
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    7850
收藏 人收藏

    評論

    相關(guān)推薦

    不同行業(yè)的數(shù)字工廠哪些特點和差異?

    各行業(yè)的獨特差異也將持續(xù)推動定制化解決方案的創(chuàng)新,以滿足不同行業(yè)日益增長的數(shù)字化轉(zhuǎn)型需求。對于設(shè)備管理系統(tǒng)而言,需要深入理解各行業(yè)數(shù)字工廠的特點和差異,針對性地進(jìn)行優(yōu)化和升級,為各行業(yè)數(shù)字工廠的穩(wěn)定運行和高效發(fā)展提供堅實保障。
    的頭像 發(fā)表于 04-17 10:29 ?141次閱讀
    不同行業(yè)的數(shù)字工廠<b class='flag-5'>有</b>哪些特點和<b class='flag-5'>差異</b>?

    C++ QT開發(fā),IC讀寫器程序

    0x10#define NEEDHALT 0x20 //#define NEEDSERIAL 0x08#define EXTERNKEY 0x10 //讓讀寫器發(fā)出聲音typedef
    的頭像 發(fā)表于 12-30 14:55 ?455次閱讀
    C++ QT開發(fā),IC讀寫器程序

    DAC108S085設(shè)定為第一級輸出時,不同通道差異,為什么?

    DAC108S085設(shè)定為第一級輸出時,不同通道差異 1.24V基準(zhǔn) ABCD四個通道都接近1.2mV EFG接近0.9mV H是0.3mV DAC的偏差是越靠后越大?
    發(fā)表于 12-18 07:18

    ESD HBM測試差異較大的結(jié)果分析

    ESD HBM測試結(jié)果差異較大的原因,通常包括設(shè)備/儀器差異、?校準(zhǔn)和維護(hù)水平不同、?環(huán)境條件差異、?測試樣本差異、?測試操作員技能和經(jīng)驗差異
    的頭像 發(fā)表于 11-18 15:17 ?954次閱讀
    ESD HBM測試<b class='flag-5'>差異</b>較大的結(jié)果分析

    SV中define宏定義的用法

    SV中使用預(yù)處理指令`define來定義宏,宏可以用來創(chuàng)建文本替換。根據(jù)場景不同,`define主要用來定義常量、簡化復(fù)雜的表達(dá)式或代碼段以及提高代碼的可移植性。其基本語法為:
    的頭像 發(fā)表于 10-21 14:22 ?1448次閱讀

    LC濾波器和RC濾波器哪些差異

    LC濾波器和RC濾波器是電子工程中常見的兩種濾波器類型,它們在電路結(jié)構(gòu)、工作原理、性能特點以及應(yīng)用場合等方面存在顯著的差異。
    的頭像 發(fā)表于 09-27 15:26 ?3327次閱讀

    LM358M和LM358MX什么差異?

    請教一下,LM358M / MX差異?
    發(fā)表于 09-24 06:02

    不同行業(yè)的配電室什么差異

    蜀瑞創(chuàng)新:不同行業(yè)的配電室在多個方面存在顯著的差異,這些差異主要體現(xiàn)在配電室的規(guī)模、功能、設(shè)備配置、安全性要求以及運行管理等方面。每種類型的配電室都會根據(jù)具體的應(yīng)用場景和行業(yè)特點進(jìn)行定制化設(shè)計。
    的頭像 發(fā)表于 08-29 16:55 ?523次閱讀
    不同行業(yè)的配電室<b class='flag-5'>有</b>什么<b class='flag-5'>差異</b>?

    typedef和struct啥區(qū)別

    在C語言中, typedef 和 struct 是兩個非常重要的關(guān)鍵字,它們在定義數(shù)據(jù)結(jié)構(gòu)時扮演著關(guān)鍵的角色。然而,它們之間一些明顯的區(qū)別。 1. struct 關(guān)鍵字 struct (結(jié)構(gòu)體
    的頭像 發(fā)表于 08-20 11:00 ?2118次閱讀

    typedef struct和直接struct的區(qū)別

    在C語言中, typedef 和 struct 是兩種不同的關(guān)鍵字,它們在定義和使用上有著明顯的區(qū)別。 typedef struct 和直接 struct 在 C 語言中用于定義結(jié)構(gòu)體類型,但它們在
    的頭像 發(fā)表于 08-20 10:58 ?3384次閱讀

    tvs管單向雙向什么差異

    可以分為單向TVS和雙向TVS兩種類型,它們在結(jié)構(gòu)、工作原理、應(yīng)用場景等方面存在一些差異。 一、單向TVS和雙向TVS的結(jié)構(gòu)差異 單向TVS的結(jié)構(gòu) 單向TVS管是一種單極性的保護(hù)器件,其內(nèi)部結(jié)構(gòu)主要由一個PN結(jié)組成。PN結(jié)的一端連接到陽極,另一端連接到陰極。當(dāng)陽極電壓高于
    的頭像 發(fā)表于 08-01 09:42 ?3112次閱讀

    開關(guān)柜和環(huán)網(wǎng)柜之間哪什么差異?

    開關(guān)柜、環(huán)網(wǎng)柜之間的差異分析
    的頭像 發(fā)表于 07-16 15:37 ?961次閱讀
    開關(guān)柜和環(huán)網(wǎng)柜之間<b class='flag-5'>有</b>哪什么<b class='flag-5'>差異</b>?

    FSMC_Bank1和FSMC_Bank1E沒有定義是怎么回事?

    (STM32F429_439xx) #define FMC_Bank1((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) #define FMC_Bank1E
    發(fā)表于 05-15 08:00

    ISO 7637-2與ISO16750-2對于拋負(fù)載測試什么差異呢?

    在汽車電子系統(tǒng)所有脈沖中,拋負(fù)載是常見而且也是危害比較大的一種現(xiàn)象。那么ISO 7637-2 與ISO16750-2對于拋負(fù)載測試什么差異?ISO16750-2 相比ISO7637-2更為嚴(yán)格。
    的頭像 發(fā)表于 05-08 14:44 ?2065次閱讀
    ISO 7637-2與ISO16750-2對于拋負(fù)載測試<b class='flag-5'>有</b>什么<b class='flag-5'>差異</b>呢?

    封裝貼片電容和不封裝的差異

    封裝貼片電容(通常稱為SMD電容或表面貼裝電容器)與未封裝的電容之間存在顯著的差異,這些差異主要體現(xiàn)在以下幾個方面: 1、物理尺寸與結(jié)構(gòu):封裝貼片電容是將金屬電極片、電介質(zhì)和端子等元件加工成覆蓋
    的頭像 發(fā)表于 05-07 16:10 ?983次閱讀
    封裝貼片電容和不封裝的<b class='flag-5'>有</b>何<b class='flag-5'>差異</b>?