一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2020-09-27 10:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

比如我們?cè)谑褂?a target="_blank">STM32庫(kù)的斷言(assert),你會(huì)發(fā)現(xiàn)官方提供了包含“__FILE__、__LINE__”的代碼。

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

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

HAL使能Assert:

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

如果添加了這段斷言代碼,對(duì)于開(kāi)發(fā)大型、復(fù)雜的系統(tǒng),這條語(yǔ)句其實(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__編譯文件名稱(chēng)

File中文意思即文件,這里的意思主要是指:正在編譯文件對(duì)應(yīng)正在編譯文件的路徑和文件的名稱(chē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)上面說(shuō)的是編譯的文件名,是一個(gè)字符串,而這里說(shuō)的是行號(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)那部分代碼之前編譯好了,后面沒(méi)有編譯,這個(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推薦閱讀:

責(zé)任編輯:xj

原文標(biāo)題:__FILE__、__LINE__等幾種C標(biāo)準(zhǔn)用法

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

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

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141674
  • File
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    14532
  • Line
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    11883

原文標(biāo)題:__FILE__、__LINE__等幾種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ǔ)言核心技術(shù)(中文版)

    該資料是“C編程語(yǔ)言”和“C語(yǔ)言鏈接庫(kù)”的完整參考手冊(cè)。這本書(shū)的目的是提供一本方便、可靠的手冊(cè),輔助日常的編程工作。本書(shū)描述C
    發(fā)表于 06-13 16:39

    單片機(jī)c語(yǔ)言編程實(shí)例大全

    單片機(jī)c語(yǔ)言編程實(shí)例大全_18
    發(fā)表于 04-30 16:11 ?3次下載

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?1134次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    C語(yǔ)言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言的歷史及程序介紹.pdf》資料免費(fèi)下載
    發(fā)表于 04-09 16:10 ?0次下載

    51單片機(jī)C語(yǔ)言學(xué)習(xí)筆記

    c51語(yǔ)言快速入門(mén)
    發(fā)表于 03-24 14:04 ?3次下載

    AN-352: 如果使用得當(dāng),高速比較器可提供許多有用的電路功能

    電子發(fā)燒友網(wǎng)站提供《AN-352: 如果使用得當(dāng),高速比較器可提供許多有用的電路功能.pdf》資料免費(fèi)下載
    發(fā)表于 01-08 14:36 ?0次下載
    AN-352: 如果使用<b class='flag-5'>得當(dāng)</b>,高速比較器可提供許多有用的電路功能

    C語(yǔ)言程序設(shè)計(jì)教程第4版第8講:指針

    C語(yǔ)言指針講解
    發(fā)表于 11-20 14:10 ?6次下載

    C語(yǔ)言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語(yǔ)言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?639次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>指針學(xué)習(xí)筆記

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過(guò)使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?1223次閱讀

    C語(yǔ)言C++中結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語(yǔ)言C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?767次閱讀

    C語(yǔ)言與Java語(yǔ)言的對(duì)比

    C語(yǔ)言和Java語(yǔ)言都是當(dāng)前編程領(lǐng)域中的重要成員,它們各自具有獨(dú)特的優(yōu)勢(shì)和特點(diǎn),適用于不同的應(yīng)用場(chǎng)景。以下將從語(yǔ)法特性、內(nèi)存管理、跨平臺(tái)性、性能、應(yīng)用領(lǐng)域等多個(gè)方面對(duì)C
    的頭像 發(fā)表于 10-29 17:31 ?1069次閱讀

    C語(yǔ)言與其他編程語(yǔ)言的比較

    C語(yǔ)言作為一種歷史悠久的編程語(yǔ)言,自其誕生以來(lái),一直在軟件開(kāi)發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強(qiáng)的特點(diǎn),成為了系統(tǒng)級(jí)編程的首選語(yǔ)言之一。
    的頭像 發(fā)表于 10-29 17:30 ?1077次閱讀

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?614次閱讀

    hex文件如何查看原c語(yǔ)言代碼

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語(yǔ)言代碼是不可能的,因?yàn)?.hex 文件是二進(jìn)制文件,它包含了單片機(jī)程序編譯后的機(jī)器碼,這些機(jī)器碼與原始的 C 語(yǔ)言代碼在結(jié)構(gòu)和表達(dá)上存在巨大的
    的頭像 發(fā)表于 09-02 10:37 ?4927次閱讀

    C++語(yǔ)言基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《C++語(yǔ)言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?10次下載