娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月31日(星期五)

2019年01月31日 | STM32程序中if和#if的區別

發布者:會彈琴的鯨魚3312 來源: eefocus關鍵字:STM32 手機看文章 掃描二維碼
隨時隨地手機看文章

(1)首先,if是條件語句,#if是預處理指令,功能相同,執行的時期不同


(2)舉例1:


#define A 2


#if A==2


void foo()


{


   printf("A == 2");


}


#else


void foo()


{


   printf("A != 2");


}


#endif




int main()


{


   foo();


}

舉例2:


這樣會輸出 A == 2


如果改變#define A 2就可能會輸出A != 2

#if.


   a


#else 


   b


#endif,其實這個就是選擇編譯那部分,和if-else的區別就是:編譯的時候進行選擇的,如果是a的話,b那么就根本不去編譯,而if-else是全部編譯好的,然后再去運行

那么問題來了,用#if #else的預處理方式,如果是a的話,那么在程序運行中,條件滿足else了,那么會執行b嗎??


答案是:不會,原因在(3)中解釋


(3)#if的作用:有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件,這當然可以通過變量設置,把所有可能用到的代碼都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分代碼,就沒必要把所有的代碼都寫進去,就可以用條件編譯,通過預編譯指令設置編譯條件,在不同的需要時編譯不同的代碼。


所以,一旦預處理條件部分編譯后,在運行中只執行符合條件的部分代碼塊



即可以設置不同的條件,在編譯時編譯不同的代碼,預編譯指令中的表達式與C語言本身的表達式基本一至如邏輯運算、算術運算、位運算等均可以在預編譯指令中使用。之所以能夠實現條件編譯是因為預編譯指令是在編譯之前進行處理的,通過預編譯進行宏替換、條件選擇代碼段,然后生成最后的待編譯代碼,最后進行編譯。

#if 的一般含義是如果#if 后面的常量表達式為true,則編譯它所控制的代碼,如條件1成立時就代碼段1,條件1不成立再看條件2是否成立,如果條件2成立則編譯代碼段2,否則再依次類推判斷其它條件,如果條件1-N都不成力則會編譯最后的代碼段n+1。

(4)#if的好處:系統裁剪


系統裁剪是針對系統的用途,對系統的源代碼進行一下優化,減少不必要的功能。




/*--------------------------------------------------------------------*/

#include“stdio.h”

#define TEST_2    1

int main()

{

  int  a=11;

  #if  TEST_2 

      int *b=&a;                    

      *b = 10;

  #endif

  a++;

}

 

/*----------------------------------------------------------------------*/

如上面的例子,對于某些功能不需要,我們只需對于的功能TEST_2的宏定義改成0,然后重新編譯就行了。當然一般宏定義是放在一個特定的文件(這里為了簡單就寫在一起),這樣外面的人只需要更改那個文件所對應的值就行對系統進行裁剪而不需要關心具體代碼,就行實現裁剪。


關鍵字:STM32 引用地址:STM32程序中if和#if的區別

上一篇:STM32F4移植FAT32系統出現的問題歸納總結
下一篇:關于STM32程序仿真時卡死在default_handler的解決方法

推薦閱讀

激光雷達在無人機、工業自動化、自動駕駛領域都是重要的產品,激光雷達鯨吞汽車行業還為時過早,但是已經聞到了“血腥味”,相關新創公司們也如雨后春筍般涌現出來。據悉16 家公司都在競逐固態激光雷達,我們離降價還有多遠?激光雷達依然是投資者和技術專家眼中的香餑餑,他們不但著眼于該技術在汽車行業的應用,還準備讓激光雷達在無人機、工業自動化、...
全面屏手機發展到2019年,用戶早已形成自己的審美觀,有的人對劉海屏嗤之以鼻,有的人則對挖孔屏嫌棄不已,當然也不乏對兩者都不感冒的人。那么,現在有一款iPhone XS Max和一款三星S10+擺在你面前,劉海屏與挖孔屏設計,你會站在哪一方?iPhone XS Max對比三星S10+(圖源見水印)  從外媒曝光的圖片來看,三星S10+的確和傳聞一樣采用了時...
設計背景: DDS(Direct Digital Synthesizer)直接數字式頻率合成器,是一種新型頻率合成技術,具有低成本、低功耗、高分辨率、相對帶寬大和頻率轉換時間短等優點。較容易實現頻率、相位以及幅度的數控調制,廣泛應用在電信與電子儀器和通信領域。波形發生器是一種數據信號發生器,在調試硬件時,常常需要加入一些信號,以觀察電路工作是否正常。加...
按鍵控制開始暫停int main(void){ unsigned char dis[15], count; WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer //設置單片機工作時鐘 設置為1MHZ if (CALBC1_1MHZ == 0xFF) // If calibration constant erased { while (1) ; ...

史海拾趣

問答坊 | AI 解惑

目前PCB抄板信號隔離技術的主要應用

PCB抄板信號隔離技術是使數字或模擬信號在發送時不存在穿越發送和接收端之間屏障的電流連接。這允許發送和接收端外的地或基準電平之差值可以高達幾千伏,并且防止可能損害信號的不同地電位之間的環路電流,主要應用在: (1)系統地的噪聲比較大, ...…

查看全部問答∨

有用歐泰CUP-1233的PC104的么?

CE5.0網卡自帶網卡驅動不好使,有遇到這樣現象的么?8139D的…

查看全部問答∨

請教嵌入式視頻服務器

我想在DM6446的ARM端做個嵌入式視頻服務器,就是在PC上可以用IE來瀏覽DM6446采集的視頻,我現在知道一些boa的知識,能移植boa來用IE瀏覽簡單的靜態網頁,可以把采集的視頻通過TCP協議傳輸到PC上保存成一個文件。 我想問的是:我現在怎樣來做這 ...…

查看全部問答∨

基于NDIS檢測木馬通信

我想基于NDIS編程監控木馬通信實現木馬的檢測,但現在不知道這樣做可行否,并且用它和用Winpcap等開發包有什么不同,比winpcap有優勢嗎?因為我知道winpcap的底層也是用NDIS的。很迷惑,著急!謝謝!…

查看全部問答∨

PIC單片機C語言編程問題,求大俠幫忙

第一次在PIC單片機中寫C語言程序。全按照《嵌入式C語言編程與Microchip PIC》這本書上講的寫的。 但是總是有幾個地方編譯出錯。 以下是在編譯器中,出錯的代碼部分(在編譯器中是紅色的)  這是怎么回事啊????? #include<pic.h ...…

查看全部問答∨

如何實現遠程數據傳輸?

工業應用中有大量系統需要遠程數據傳輸,如遠程電表抄寫,工業調度監控等。GPRS技術在這些系統中得到廣泛應用,如何構建高性價比的方案成為系統設計人員的一個首要問題。 S260是一款極具性價比的嵌入式GSM/GPRS模塊。S260工作于900/1800/1900MHz頻 ...…

查看全部問答∨

【預告】

  我只有2張照片, STM32VL_Discovery.JPG (350.01 KB) 下載次數:28 2010-8-21 10:45 Top_View.JPG (111.71 KB) 下載次數:10 2010-8-21 10:45 ...…

查看全部問答∨

大家來聊聊,MSP430掃描256點的RGBLED點陣夠不夠用

想用MP430做一個RGBLED的數字鐘,打算用32*8的點陣,三路PWM調色,不知道速度夠不夠……呵呵…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 东方市| 天全县| 苏州市| 府谷县| 昌邑市| 东海县| 静宁县| 楚雄市| 汶上县| 郸城县| 旬邑县| 衢州市| 措美县| 高碑店市| 英德市| 图木舒克市| 江门市| 乌鲁木齐县| 兴国县| 名山县| 河池市| 合水县| 顺义区| 富锦市| 会昌县| 克山县| 安溪县| 长垣县| 资兴市| 昭觉县| 邹平县| 平顶山市| 宜城市| 阿拉善左旗| 南靖县| 西藏| 马边| 元朗区| 武威市| 大理市| 项城市|