那曲檬骨新材料有限公司

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何得當使用C語言的特殊的用法

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-09-27 10:41 ? 次閱讀

C語言有很多特殊的用法,如果這些特殊用法使用得當,會是你的代碼變得更加有健壯,更加容易維護。

比如我們在使用STM32庫的斷言(assert),你會發(fā)現(xiàn)官方提供了包含“__FILE__、__LINE__”的代碼。

標準外設庫位于stm32fxxx_conf.h文件:

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

HAL使能Assert:

在代碼中會看見如下代碼:

如果添加了這段斷言代碼,對于開發(fā)大型、復雜的系統(tǒng),這條語句其實用處很大。每次程序運行錯誤之后,它會打印程序代碼指定的位置,方便我們在龐大的程序中很快找到錯誤的位置。

我們的系統(tǒng)會隨著時間的推移,不斷升級更新,也就是需要提交很多版本的可執(zhí)行文件(hex、bin等)。但是,產品后期使用中,我們對某些設備進行了升級,可能忽略了一些設備(忘記升級),如果出現(xiàn)故障,我們怎樣才能很快找到是哪一個版本的軟件出現(xiàn)故障呢?

我們的系統(tǒng)會隨著時間的推移,不斷升級更新,也就是需要提交很多版本的可執(zhí)行文件(hex、bin等)。但是,產品后期使用中,我們對某些設備進行了升級,可能忽略了一些設備(忘記升級),如果出現(xiàn)故障,我們怎樣才能很快找到是哪一個版本的軟件出現(xiàn)故障呢?

C幾種特殊標準定義

__FILE__:正在編譯文件的文件名__LINE__:正在編譯文件的行號__DATE__:編譯時刻的日期字符串 如“Sep 22 2020”__TIME__:編譯時刻的時間字符串 如”1000“__STDC__:判斷該文件是不是標準C程序

1.__FILE__編譯文件名稱

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

Keil版本對應的路徑是相對于工程文件而言的路徑,IAR版本路徑是相對Windows路徑。

源代碼:

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

Keil:

編譯文件路徑:Appmain.c

IAR:

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

2.__LINE__編譯文件行號上面說的是編譯的文件名,是一個字符串,而這里說的是行號,是一個整型變量,這是這兩者的區(qū)別, 比如在工程中添加源代碼:

char BuildLine = __LINE__;printf("編譯代碼所在行:%d ", BuildLine); 可以看不是數(shù)組的字符串,打印信息: 編譯代碼所在行:44 一般情況下,__FILE__是和__LINE__結合一起使用,用于打印我們代碼信息,方便快速定位代碼位置。 3.__DATE__編譯日期__DATE__日期,需要注意的是:這個日期是你在編譯時Windows系統(tǒng)的日期,如果對應那部分代碼之前編譯好了,后面沒有編譯,這個日期還是之前的日期,而不是后面編譯的日期。因此,如果這里用于定版本,就需要在定版本時對工程進行全部重新編譯,它才會更新至你最后編譯的日期。 代碼:

char BuildDate[] = __DATE__;printf("編譯日期:%s ", BuildDate); 輸出結果: 編譯日期:Sep 22 2017 4.__TIME__編譯時間這個和__DATE__一樣的原理,編譯時的時間,也是一個字符串。 再次提醒:用于定版本:需要重新編譯,這樣才是最后一次編譯時間。 代碼:

char BuildTime[] = __TIME__;printf("編譯時間:%s ", BuildTime); 輸出結果 編譯時間:1000 5.__STDC__標準C代碼這個標準在我們單片機嵌入式編程中運用的比較少,當要求程序嚴格遵循ANSIC標準時該標識符被賦值為1,主要是判斷我們的程序文件是不是標準C程序。 代碼:

#ifdef __STDC__ printf("標準C代碼文件 ");#else printf("非標準C代碼文件 ");#endif推薦閱讀:

責任編輯:xj

原文標題:__FILE__、__LINE__等幾種C標準用法

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137727
  • File
    +關注

    關注

    0

    文章

    19

    瀏覽量

    14381
  • Line
    +關注

    關注

    0

    文章

    26

    瀏覽量

    11666

原文標題:__FILE__、__LINE__等幾種C標準用法

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言程序設計教程第4版第8講:指針

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

    C語言指針學習筆記

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

    C語言中的socket編程基礎

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

    C語言C++中結構體的區(qū)別

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

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優(yōu)勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發(fā)表于 10-29 17:31 ?438次閱讀

    C語言與其他編程語言的比較

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

    C++語言基礎知識

    電子發(fā)燒友網站提供《C++語言基礎知識.pdf》資料免費下載
    發(fā)表于 07-19 10:58 ?7次下載

    按照這樣學習C語言,成為卷王不是夢!

    在計算機編程領域,C語言被譽為一種強大而靈活的編程語言,掌握好C語言不僅可以讓你輕松駕馭各種編程任務,還能夠為你的職業(yè)生涯打下堅實的基礎。但
    的頭像 發(fā)表于 07-06 08:04 ?362次閱讀
    按照這樣學習<b class='flag-5'>C</b><b class='flag-5'>語言</b>,成為卷王不是夢!

    PLC編程語言C語言的區(qū)別

    在工業(yè)自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區(qū)別。本文將從多個維度深入探討PLC編程
    的頭像 發(fā)表于 06-14 17:11 ?3241次閱讀

    AWTK 開源串口屏開發(fā)(18) - 用 C 語言自定義命令

    編寫代碼即可實現(xiàn)常見的應用。但是,有時候我們需要自定義一些命令,以實現(xiàn)一些特殊的功能。本文檔介紹如何使用C語言自定義命令。1.實現(xiàn)hmi_model_cmd_t接口
    的頭像 發(fā)表于 05-11 08:24 ?488次閱讀
    AWTK 開源串口屏開發(fā)(18) - 用 <b class='flag-5'>C</b> <b class='flag-5'>語言</b>自定義命令

    C語言基礎-為什么要使用C

    當今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關系數(shù)據庫管理系統(tǒng)) MySQL 都是使用 C 語言編寫的。
    發(fā)表于 03-25 11:20 ?489次閱讀

    嵌入式系統(tǒng)中C語言結構體的基礎實現(xiàn)與應用

    C語言中的數(shù)組只能允許程序員定義存儲相同類型數(shù)據。但是結構是C語言編程中允許您存儲不同數(shù)據類型的數(shù)據。
    發(fā)表于 03-12 14:29 ?560次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎實現(xiàn)與應用

    C語言#define的應用

    C/C++ 編程語言中,當程序被編譯時,被發(fā)送到編譯器,編譯器將程序轉換為機器語言,然后完成編譯并執(zhí)行該程序。預處理器也稱為宏預處理器。
    發(fā)表于 03-06 11:29 ?426次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應用

    C語言的指針用法

    C語言編程中善用指針可以簡化一些任務的處理,而對于一些任務(比如動態(tài)內存分配),必須要有指針才行的。也就是說精通C指針編程是很有必要的,幫助你成為一名優(yōu)秀的Cer。
    發(fā)表于 03-05 14:22 ?391次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的指針<b class='flag-5'>用法</b>

    verilog inout用法與仿真

    Verilog語言是一種硬件描述語言(HDL),用于描述數(shù)字邏輯電路和系統(tǒng)。它是一種非常強大且廣泛使用的語言,在數(shù)字電路設計中扮演著重要的角色。其中, inout 是Verilog中的一種信號類型
    的頭像 發(fā)表于 02-23 10:15 ?3304次閱讀
    博e百| KK百家乐的玩法技巧和规则| 澳门百家乐官网游戏说明书| 大发888游戏是真的么| 百家乐国际娱乐城| 在百家乐官网二庄两闲揽的概率| 梭哈棋牌游戏大厅| 百家乐十赌九诈| 沙龙百家乐官网娱乐场开户注册| 凤凰网上娱乐| 百家乐娱乐网佣金| 鸟巢百家乐官网的玩法技巧和规则| 百家乐官网如何写路| 大发888在线娱乐城合作伙伴 | 24山向吉凶水法| 网络百家乐官网| 蓝盾网上娱乐| 威尼斯人娱乐电子游戏| 淘金百家乐现金网| 百家乐官网积分| 360博彩通| 威尼斯人娱乐网开户| 百家乐平注法技巧| 真人百家乐官网赌场娱乐网规则 | 百家乐任你博娱乐平台| 免费百家乐官网计划软件| 百家乐官网单机游戏免费| 博狗投注| 二八杠棋牌| 二代百家乐破解| 24葬书-葬法| 打百家乐官网庄闲的技巧| 仁化县| 沈阳盛京棋牌官网| 聚龍社百家乐的玩法技巧和规则| 百家乐胜率被控制| 百家乐官网发牌牌规| 百家乐官网冯氏坐庄法| k7线上娱乐城| 顶级赌场官方下载| 58百家乐的玩法技巧和规则 |