stm32中#ifndef __LED_H的作用
生活随笔
收集整理的這篇文章主要介紹了
stm32中#ifndef __LED_H的作用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面是來至網絡上比較詳盡的解答
先回答你的問題。 1 是可以寫成 LED.H只不過你接下來要寫一句#defined LED.H 因為#ifndef 后面的字符串 不管是 LED.H還是__LED_H和頭文件的名字沒有半毛錢關系。只不過是為了讀程序的時候方便而已。其實那個字符串只要合法的就行了。 2 用法 #ifndef 字符串 #define 上述字符串 #endif 一般放在頭文件里面,作用就是以防你在.c文件里面不小心重復包含頭文件的時候不會報錯。 例如,現在你有 main.c LED.H 兩個文件。 如果你在main函數里面兩次包含頭文件LED.H。即 #include “LED.h” #include “LED.h” int main(void) { return 0; } 那么你的程序肯定會報錯。因為你的頭文件重復添加了。 但是如果你在LED.H里面動一點手腳就把問題解決了,在LED.H添加如下代碼 #ifndef abcdefg #define abcdefg #include "stm32f10x.h" void led_init(void); ...//其他函數聲明 #endif 就可以把問題解決。 分析如下:#ifndef 的是if no define----”如果沒有定義“的意思。帶#的是預編譯命令,在編譯之前執行。 如果沒有定義abcdefg 那么就#define abcdefg 定義了abcdefg 當你多次包含LED.H這個頭文件的時候。第一次肯定是沒有定義的,所以肯定會執行 #define abcdefg 但是第二次,第三次,..以后再包含的時候,由于第一次已經定義過了abcdefg字符串,所以第二次的#ifndef abcdefg 不成立,所以往下的語句就不會執行。那么就不會重復包含頭文件了。也不會把頭文件里面聲明過的函數再繼續重復聲明了。也就不會報錯了。所以記住一點:#ifndef 在頭文件里的用法是通過判斷這個字符串是否被定義過,從而決定是否跳過某些語句來達到,條件編譯,防止報錯的效果的。當然條件編譯的用處很靈活看你怎么用。給樓主總結一下3種條件編譯 第一種: #if 表達式 程序段1 #endif第二種: #ifndef 表達式 程序段2 #endif第三種 #ifdefine 表達式 程序段3 #endif以上是三種基本的條件編譯,當然可以嵌套。還可以加#elsedefine 不過elsedefine的宏命令簡寫我忘記是什么了,哈哈。所以就不貼上了。反正用法和if-else 一樣,都是通過判斷表達式是否為真,來決定往下的程序段是否被編譯。總結
以上是生活随笔為你收集整理的stm32中#ifndef __LED_H的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32中断优先级分组
- 下一篇: 作者:Ochora Dennis Rea