久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9555|回復: 1
打印 上一主題 下一主題
收起左側

關于頭文件中#ifndef的理解

[復制鏈接]
跳轉到指定樓層
樓主
ID:89763 發表于 2015-9-10 00:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
問題:
如果沒定義LED.h
那這句能不能寫成#ifndef LED.H
__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 一樣,都是通過判斷表達式是否為真,來決定往下的程序段是否被編譯。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:350791 發表于 2018-8-2 09:50 | 只看該作者
學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美老妇交乱视频 | 亚洲视频一区二区三区 | 亚洲看片网站 | 黄色免费网站在线看 | 欧美婷婷| 国产一区二区三区免费观看在线 | 亚洲电影一区二区三区 | 真人一级毛片 | 99色综合| 亚洲一页| 日韩精品激情 | 99视频在线免费观看 | 欧美久久久网站 | 国产在线观看福利 | 久久久久亚洲精品国产 | 天天操综合网站 | 中文在线视频观看 | 一区二区免费在线观看 | 欧美一级二级在线观看 | 国产乱码精品一区二区三区忘忧草 | 国产高清亚洲 | 国产二区在线播放 | 日韩在线一区二区三区 | 久久大陆 | 午夜天堂精品久久久久 | 五月天激情综合网 | 日日操夜夜操天天操 | 国产精品婷婷 | 精品动漫一区 | 亚洲一区二区三区在线 | 国产精品免费大片 | 一区二区三区精品视频 | 国产福利在线播放麻豆 | 另类一区 | 久久99蜜桃综合影院免费观看 | 国产精品a久久久久 | 国产亚洲精品久久yy50 | 免费超碰| 91精品一区二区三区久久久久 | 成人在线视频免费观看 | 亚洲国产精品久久久 |