今天我們來看一下利用宏定義編寫類似函數調用的方法和真實的函數有什么區別。
一、宏和函數怎么選?
首先來看一個例子:
#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文章
4369瀏覽量
64187 -
代碼
+關注
關注
30文章
4886瀏覽量
70252 -
編譯器
+關注
關注
1文章
1654瀏覽量
49886
發布評論請先 登錄
相關推薦
熱點推薦
使用cubemx配置硬件spi使用硬件nss片選,片選一直是低的,不能置高,這正常嗎?
使用cubemx 配置硬件spi 使用硬件nss片選,按照道理來講應該是讀寫的時候 片選拉低,但是現在的現象是,片選一直是低的,不能置高。用的是硬件片
發表于 03-14 06:07
LED戶外顯示屏應該選什么樣的比較好呢?
戶外LED顯示屏應該選什么樣的比較好呢?LED電子大屏幕是科技與媒體的完美結合,它能把夢幻、科技、潮流、時尚的理念淋淋盡致地展現出來, 完全可以當仁不讓地成為舞美新勢力新的室內大型LED屏幕

是德33220A 函數任意波形發生器
是德33220A 函數任意波形發生器 儀器特性 *33220A 函數發生器包括 USB、GPIB 和 LAN 接口 *用于信號設置視覺驗證的圖形模式 *選件 001 提供支持同步信道的多元鏈路
宏景智駕總部落地衢州
近日,宏景智駕衢州總部落地儀式在南孔圣地衢州東方橋庵里大酒店盛大舉行!衢州智造新城黨工委副書記、管委會常務副主任巫建民與宏景智駕創始人及CEO劉飛龍博士共同為落地儀式剪彩。
ADS1282沒有CS片選,應該怎樣單獨給DAC傳輸數據呢?
請問DAC1282和ADS1282的SCLK、DIN、DOUT可以接到一起,然后分別連接MCU的SCK、SOMI、SIMO嗎?
如果可以的話,ADS1282沒有CS片選,應該怎樣單獨給DAC傳輸數據呢?
謝謝
發表于 11-25 07:35
SUMIF函數與SUMIFS函數的區別
SUMIF函數和SUMIFS函數都是Excel中用于條件求和的函數,它們可以幫助用戶根據特定的條件對數據進行求和。盡管它們的基本功能相似,但在使用場景和功能上存在一些差異。以下是對這兩個函數
SUMIF函數使用教程
SUMIF函數是Excel中非常實用的函數之一,能夠根據指定條件對數據進行篩選和求和操作。以下是對SUMIF函數使用方法的詳細教程: 一、基本語法 SUMIF函數的基本語法為: =SU
SV中define宏定義的用法
SV中使用預處理指令`define來定義宏,宏可以用來創建文本替換。根據場景不同,`define主要用來定義常量、簡化復雜的表達式或代碼段以及提高代碼的可移植性。其基本語法為:
如何由系統函數求頻率響應
頻率響應函數表征了測試系統對給定頻率下的穩態輸出與輸入的關系,可以通過系統函數(或稱為傳遞函數)來求解。以下是由系統函數求頻率響應的步驟: 一、理解系統
勝宏科技擬收購APCB 100%股權
勝宏科技近期發布重要公告,宣布其計劃通過全資子公司新加坡勝宏及PSL,以不超過2.787億元人民幣的現金,全面收購APCB Electronics(Thailand)Co.,Ltd.(簡稱APCB)的100%股權。此次收購標志著勝宏
面試常考+1:函數指針與指針函數、數組指針與指針數組
在嵌入式開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、指針函數與函數指針指針

TC387中有__disable_interrupts()關閉所有中斷和打開所有中斷的函數或宏嗎?
TC387 芯片中有__disable_irq()和__enable_irq()關閉所有中斷和打開所有中斷的函數或宏嗎,請告知
發表于 08-01 08:22
STM32的外部事件應該何如使用?
知道外部事件是產生中斷標志,但是不產生中斷請求。但是在主函數中應該怎么檢測這個中斷標志,或者說應該怎么配置。在cubemx中,將io口配置為事件模式之后。相對應的中斷線也不高亮了,想問一下大佬們,
發表于 07-05 08:00
請問怎么在自己的工程里添加一個宏INCLUDE_xTaskGetHandle?
你好:
我需要使用 xTaskGetHandle 這個API,但是 idf.py menuconfig進去freertos組件里沒有這個配置選項
我應該怎么添加一個宏定義到我的cmakelist里??而不是直接改sdk的文件。
發表于 06-21 12:39
webserver獲取網頁submit應該用什么函數呢?
各位大神:
esp32c3,idfd ubuntu編譯,html轉為C放在代碼里,想獲取網頁的提交按鍵進行響應,請問提交“submit”時,C里應該對應的是哪個函數。本人webserver小白,感謝指教!
發表于 06-18 07:18
評論