今天我們來看一下利用宏定義編寫類似函數調用的方法和真實的函數有什么區別。
一、宏和函數怎么選?
首先來看一個例子:
#define N 2+2
void main()
{
int a = N * N;
printf( "a = %d", a);
}
這里,我們得理解宏的工作方式,它是在編譯器編譯代碼之前做的一個純文本的替換工作,因此,有時候簡單宏替換的結果就會和我們預想的結果出現偏差。
比如上面的例子,我們預期 N 為 4,a=16,但實際結果卻為 a=8;原因在于宏的作用方式是傻瓜式的文本替換。
在編譯之前,編譯器首先將宏定義的文本替換到程序體中,這個替換是完全無腦的一個操作,看一下替換結果就知道了。
#define N 2+2
void main()
{
int a = 2 + 2 * 2 + 2;
printf( "a = %d", a);
}
這也就是我們上一篇文章中講到的,寫宏函數的時候一定要注意括號的應用,多加括號一定是利大于弊的。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4417瀏覽量
67504 -
代碼
+關注
關注
30文章
4968瀏覽量
73960 -
編譯器
+關注
關注
1文章
1672瀏覽量
51600
發布評論請先 登錄
相關推薦
熱點推薦
宏微科技首家歐洲全資子公司正式成立
在國家積極鼓勵企業“走出去”及共建“一帶一路”倡議的宏大背景下,國內功率半導體領域的領先企業——江蘇宏微科技股份有限公司(以下簡稱“宏微科技”)今日宣布,其首家歐洲全資子公司 MacMic
別漏看!廣東宏展告訴你高低溫試驗箱這些被忽視的性能細節
客戶最易忽略的性能細節疑問1、“設備的噪音和能耗在長期使用中影響大嗎?”解答:實驗室場景選噪音≤65dB的設備(宏展采用靜音壓縮機+隔音箱體設計),能耗看COP值(制冷性能系數),宏展設備COP
C語言中實現函數宏的三種方式
用 ; 的調用方式無論從程序閱讀還是使用方法方面都是十分別扭的;而規定必須使用帶花括號的 if 的調用方式有違常理的,因為宏函數應該適用于任何語法。
優缺點總結:
優點:簡單粗暴。
缺點:不能在無花括號且有
發表于 12-29 07:34
選購不迷茫:廣東宏展科技總結出通用技術規格選購關鍵疑問指南
以下從客戶視角出發,梳理不同行業在高低溫試驗箱技術規格與性能上的核心疑問、選購判斷標準,結合宏展產品優勢給出解答,貼合實際采購決策場景:通用核心技術規格疑問1、溫域范圍怎么選?是否越寬越好?客戶疑問
C語言宏拼接運算符典型使用
在C語言中,##運算符(稱為[size=16.002px]標記拼接運算符)用于宏定義中將兩個標記(token)拼接成一個新的標記。它在預處理階段處理,常用于動態生成變量名、函數名或類型名,以提高代碼
發表于 11-20 08:27
應用層外設進行數據傳輸,是否應該調用rt_device_create,rt_device_register等函數呢?
假如我要在應用層用一個新的usart2串口傳輸數據,那我應該是怎么做?
1.在工程未編譯前將usart2加上,即定義宏BSP_USING_UART2,利用RT-Thread在硬件初始化
發表于 10-11 06:29
在rtthread的main函數里用HAL_Delay函數不起作用是哪里的問題?
函數就沒有這個問題。
求大佬提供解決方法
CUBMX選的timbase source時鐘源選的是Systick,優先級是15
main函數里代碼如下
運行結果如下(一秒打印了幾百
發表于 09-15 07:53
詳解hal_entry入口函數
當使用RTOS時,程序從main函數開始進行線程調度;當沒有使用RTOS時,C語言程序的入口函數main函數調用了hal_entry函數。由于我們新建的工程是沒有選用RTOS的,因此,
使用 BSP 助手創建項目并創建 BSP 后,我應該在哪里更改 cy_device_headers.h 中列出的設備名稱宏?
使用 BSP 助手創建項目并創建 BSP 后,我應該在哪里更改 cy_device_headers.h 中列出的設備名稱宏?例如,我想手動將設備名稱從 CY8C4024FNI_S402 更改
發表于 06-26 06:06
Vicor助力宏發打造主動懸架電源系統
廈門宏發電聲股份有限公司(宏發)打造業內性能卓越的主動懸架電源系統,旨在將長期以來僅見于豪華車型的功能引入中端車型。宏發成功突破困擾知名汽車技術供應商幾十年的技術瓶頸,在滿足主動懸架系統對尺寸、重量及瞬態性能的嚴苛需求的同時,兼
使用cubemx配置硬件spi使用硬件nss片選,片選一直是低的,不能置高,這正常嗎?
使用cubemx 配置硬件spi 使用硬件nss片選,按照道理來講應該是讀寫的時候 片選拉低,但是現在的現象是,片選一直是低的,不能置高。用的是硬件片
發表于 03-14 06:07
在STM32H5上使用fatfs寫函數時用不了DMA的寫方式,應該怎么使用呢?
請問在STM32H5上使用fatfs寫函數時,用不了DMA的寫方式,應該怎么使用呢,有人遇到過類似的問題嘛
發表于 03-12 07:10
宏和函數應該怎么選
評論