91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解C語言中特殊用法

strongerHuang ? 來源:嵌入式專欄 ? 作者: strongerHuang ? 2022-07-15 08:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言有很多特殊的用法,如果這些特殊用法使用得當(dāng),會(huì)是你的代碼變得更加有健壯,更加容易維護(hù)。

比如我們?cè)谑褂?a href="http://m.xsypw.cn/v/tag/751/" target="_blank">STM32庫的斷言(assert),你會(huì)發(fā)現(xiàn)官方提供了包含“__FILE__、__LINE__”的代碼。

標(biāo)準(zhǔn)外設(shè)庫位于stm32fxxx_conf.h文件:

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

HAL使能Assert:

416d4f0a-03d8-11ed-ba43-dac502259ad0.png

在代碼中會(huì)看見如下代碼:

417e1588-03d8-11ed-ba43-dac502259ad0.png

如果添加了這段斷言代碼,對(duì)于開發(fā)大型、復(fù)雜的系統(tǒng),這條語句其實(shí)用處很大。每次程序運(yùn)行錯(cuò)誤之后,它會(huì)打印程序代碼指定的位置,方便我們?cè)邶嫶蟮某绦蛑泻芸煺业藉e(cuò)誤的位置。

我們的系統(tǒng)會(huì)隨著時(shí)間的推移,不斷升級(jí)更新,也就是需要提交很多版本的可執(zhí)行文件(hex、bin等)。但是,產(chǎn)品后期使用中,我們對(duì)某些設(shè)備進(jìn)行了升級(jí),可能忽略了一些設(shè)備(忘記升級(jí)),如果出現(xiàn)故障,我們?cè)鯓硬拍芎芸煺业绞悄囊粋€(gè)版本的軟件出現(xiàn)故障呢?

我們的系統(tǒng)會(huì)隨著時(shí)間的推移,不斷升級(jí)更新,也就是需要提交很多版本的可執(zhí)行文件(hex、bin等)。但是,產(chǎn)品后期使用中,我們對(duì)某些設(shè)備進(jìn)行了升級(jí),可能忽略了一些設(shè)備(忘記升級(jí)),如果出現(xiàn)故障,我們?cè)鯓硬拍芎芸煺业绞悄囊粋€(gè)版本的軟件出現(xiàn)故障呢?

C幾種特殊標(biāo)準(zhǔn)定義

__FILE__正在編譯文件的文件名__LINE__:正在編譯文件的行號(hào)__DATE__:編譯時(shí)刻的日期字符串 如“Sep 22 2020”__TIME__:編譯時(shí)刻的時(shí)間字符串 如”1000“__STDC__:判斷該文件是不是標(biāo)準(zhǔn)C程序

1.__FILE__編譯文件名稱

File中文意思即文件,這里的意思主要是指:正在編譯文件對(duì)應(yīng)正在編譯文件的路徑和文件的名稱。

Keil版本對(duì)應(yīng)的路徑是相對(duì)于工程文件而言的路徑,IAR版本路徑是相對(duì)Windows路徑。

源代碼:

charBuildFile[]=__FILE__;printf("編譯文件路徑:%s
", BuildFile);

Keil:

編譯文件路徑:Appmain.c

IAR

編譯文件路徑:C:UsersstrongerHuangDesktop工程主目錄Appmain.c

2.__LINE__編譯文件行號(hào)上面說的是編譯的文件名,是一個(gè)字符串,而這里說的是行號(hào),是一個(gè)整型變量,這是這兩者的區(qū)別, 比如在工程中添加源代碼:
char BuildLine = __LINE__;printf("編譯代碼所在行:%d
", BuildLine);
可以看不是數(shù)組的字符串,打印信息:編譯代碼所在行:44 一般情況下,__FILE__是和__LINE__結(jié)合一起使用,用于打印我們代碼信息,方便快速定位代碼位置。 3.__DATE__編譯日期__DATE__日期,需要注意的是:這個(gè)日期是你在編譯時(shí)Windows系統(tǒng)的日期,如果對(duì)應(yīng)那部分代碼之前編譯好了,后面沒有編譯,這個(gè)日期還是之前的日期,而不是后面編譯的日期。因此,如果這里用于定版本,就需要在定版本時(shí)對(duì)工程進(jìn)行全部重新編譯,它才會(huì)更新至你最后編譯的日期。 代碼:
char BuildDate[] = __DATE__;printf("編譯日期:%s
", BuildDate);
輸出結(jié)果:編譯日期:Sep 22 2017 4.__TIME__編譯時(shí)間這個(gè)和__DATE__一樣的原理,編譯時(shí)的時(shí)間,也是一個(gè)字符串。再次提醒:用于定版本:需要重新編譯,這樣才是最后一次編譯時(shí)間。 代碼:
char BuildTime[] = __TIME__;printf("編譯時(shí)間:%s
", BuildTime);
輸出結(jié)果編譯時(shí)間:1000 5.__STDC__標(biāo)準(zhǔn)C代碼這個(gè)標(biāo)準(zhǔn)在我們單片機(jī)嵌入式編程中運(yùn)用的比較少,當(dāng)要求程序嚴(yán)格遵循ANSIC標(biāo)準(zhǔn)時(shí)該標(biāo)識(shí)符被賦值為1,主要是判斷我們的程序文件是不是標(biāo)準(zhǔn)C程序。 代碼:
#ifdef __STDC__  printf("標(biāo)準(zhǔn)C代碼文件
");#else  printf("非標(biāo)準(zhǔn)C代碼文件
");#endif
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    364800
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141684
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70722

原文標(biāo)題:C語言幾種特殊標(biāo)準(zhǔn)定義和用法

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言中預(yù)定義宏的用法和使用場(chǎng)景

    C語言中,預(yù)定義宏是由編譯器提供的一組特殊標(biāo)識(shí)符,可以在程序中直接使用,無需進(jìn)行額外的定義。
    發(fā)表于 08-16 16:12 ?767次閱讀

    C語言中指針的基本概念和用法

    C語言中,指針是一項(xiàng)重要的概念,它允許我們直接訪問和操作內(nèi)存地址。
    發(fā)表于 08-17 15:30 ?1193次閱讀

    C語言中枚舉的基本概念和常見用法

    C語言中,枚舉是一種方便組織和表示一組相關(guān)常量的工具。枚舉類型有助于提高代碼的可讀性和可維護(hù)性。本文將介紹C語言枚舉的基本概念、語法和用法
    發(fā)表于 08-17 15:32 ?2100次閱讀

    C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別

    C語言中的循環(huán)結(jié)構(gòu)時(shí),for循環(huán)是最常用的一種。它允許重復(fù)執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?3931次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)的<b class='flag-5'>用法</b>和應(yīng)用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)與while循環(huán)的區(qū)別

    C語言中while和do-while循環(huán)的用法

    循環(huán)是一種重要的控制結(jié)構(gòu),可以使程序重復(fù)執(zhí)行一段代碼,直到滿足特定條件為止。在C語言中,while和do-while是兩種常用的循環(huán)結(jié)構(gòu),本文將詳細(xì)介紹這兩種循環(huán)的用法
    發(fā)表于 08-18 16:35 ?2533次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>while和do-while循環(huán)的<b class='flag-5'>用法</b>

    SQLx在Rust語言中的基礎(chǔ)用法和進(jìn)階用法

    SQLx是一個(gè)Rust語言的異步SQL執(zhí)行庫,它支持多種數(shù)據(jù)庫,包括MySQL、PostgreSQL、SQLite等。本教程將以MySQL數(shù)據(jù)庫為例,介紹SQLx在Rust語言中的基礎(chǔ)用法和進(jìn)階
    的頭像 發(fā)表于 09-19 14:32 ?6127次閱讀

    單片機(jī)的C語言中位操作用法

    單片機(jī)的C語言中位操作用法
    發(fā)表于 08-17 15:04

    C語言中atoi()函數(shù)的用法 相關(guān)資料分享

    C語言中atoi()函數(shù)的用法
    發(fā)表于 07-01 08:12

    C語言中的數(shù)據(jù)類型有哪幾種?const有哪些用法

    C語言中的數(shù)據(jù)類型有哪幾種?const有哪些用法?作用域與static用法是什么?extern是如何去使用的?
    發(fā)表于 07-22 06:51

    c語言中typedef的用法

    C語言是一門通用計(jì)算機(jī)編程語言,應(yīng)用廣泛。C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)
    發(fā)表于 11-09 15:23 ?9520次閱讀

    python語言中類的特殊方法相關(guān)用法詳細(xì)資料概述

    本文和大家分享的主要是python語言中類的特殊方法相關(guān)用法,希望對(duì)大家有幫助。包括了:構(gòu)造序列,程序演示
    發(fā)表于 10-25 18:01 ?16次下載

    如何得當(dāng)使用C語言特殊用法

    C語言有很多特殊用法,如果這些特殊用法使用得當(dāng),會(huì)是你的代碼變得更加有健壯,更加容易維護(hù)。 比
    的頭像 發(fā)表于 09-27 10:41 ?2168次閱讀
    如何得當(dāng)使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>特殊</b>的<b class='flag-5'>用法</b>

    C語言中的#和##的用法

    和conStr的參數(shù),并且宏conStr和toString中均含有#或者##符號(hào),所以A不能被解引用。導(dǎo)致不符合預(yù)期的情況出現(xiàn)。 3.2 解決方案 結(jié)果: 責(zé)任編輯:xj 原文標(biāo)題:C語言中#和##的用法 文章出處:【微信公眾號(hào)
    的頭像 發(fā)表于 12-06 09:34 ?7.7w次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的#和##的<b class='flag-5'>用法</b>

    C語言中的typedef的用法

    在以前的學(xué)習(xí)中對(duì)于C語言中typedef和define的認(rèn)識(shí)是,#define是宏,作用是簡(jiǎn)單的替換,而typedef也是替換,只不過比define高級(jí)的是在替換的時(shí)候會(huì)進(jìn)行語法檢查。但是后來
    發(fā)表于 01-13 13:36 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的<b class='flag-5'>用法</b>

    C語言中__attribute__ 關(guān)鍵字的用法

    嵌入式開發(fā),離不開 C 語言C語言中有很多語法會(huì)直接或間接影響你代碼的質(zhì)量,下面就來講講__attribute__ 關(guān)鍵字的用法。 1.
    發(fā)表于 10-19 09:06 ?1.4w次閱讀
    主站蜘蛛池模板: 777奇米影音| 国内外精品免费视频 | 免费看黄色毛片 | 成人在线网站 | 亚洲精品老司机综合影院 | 免费xxxx大片 | 国产理论片在线观看 | 日本综合视频 | 天天干天天添 | 日本免费一区二区三区视频 | 中文字幕一区二区三区四区五区 | 在线免费看一级片 | 高清一区高清二区视频 | 四虎影视在线影院在线观看 | 永久精品免费影院在线观看网站 | 天天干夜啪 | 丁香六月在线观看 | 美女黄页在线观看 | 日本特黄特黄刺激大片免费 | 午夜毛片视频高清不卡免费 | 新天堂在线 | 99精品视频免费 | 韩国电影天堂 | 婷婷久操 | 综合亚洲一区二区三区 | 欧美爱爱网址 | 俺去啦五月 | 私色综合网 | 在线观看一二三区 | 国产一级特黄老妇女大片免费 | 日韩无 | 天天狠天天天天透在线 | 亚洲伊人久久大香线蕉影院 | 四虎影院视频在线观看 | 污视频日本 | 国产精品一久久香蕉产线看 | 爱情岛网站亚洲禁18进入 | 久久久久久久影院 | 丁香网五月 | 免费国产成高清人在线视频 | 看片在线 |