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

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

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

關(guān)于C語(yǔ)言的一些特殊功能介紹

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:strongerHuang ? 2020-08-18 15:31 ? 次閱讀

C語(yǔ)言已經(jīng)連續(xù)幾個(gè)月占領(lǐng) TIOBE 編程語(yǔ)言排行榜首,成為最受歡迎的編程語(yǔ)言了。

C語(yǔ)言之所以那么受歡迎,除了C語(yǔ)言歷史悠久之外,還有它具有一些編程語(yǔ)言沒(méi)有的功能。那么,今年我們就來(lái)了解一下C語(yǔ)言的一些特殊功能。
一、ANSI C特殊標(biāo)準(zhǔn)定義 羅列一些常見(jiàn)的特殊定義:

__FILE__:正在編譯文件的路徑及文件名

__LINE__:正在編譯文件的行號(hào)

__DATE__:編譯時(shí)刻的日期字符串 如“July 19 2019”

__TIME__:編譯時(shí)刻的時(shí)間字符串 如”2200“

代碼:

char BuildFile[] = __FILE__;int  BuildLine = __LINE__;char BuildDate[] = __DATE__;char BuildTime[] = __TIME__;
printf("編譯文件路徑:%s
", BuildFile);printf("編譯代碼所在行:%d
", TestLine);printf("編譯日期:%s
", BuildDate);printf("編譯時(shí)間:%s
", BuildTime);

提示:__LINE__是整型數(shù)據(jù); 其實(shí)除了這些還有很多相關(guān)的定義,比如: 1.__FUNCTION__:函數(shù)名,類型為:字符常量指針。

char const* BuildFunName = __FUNCTION__;printf("函數(shù)名稱為:%s
", BuildFunName);
2.__VER__:IDE版本信息,類型為:整型。 如我用的IAR版本為:7.80.04,如下圖:

代碼:
int  IDEVersion = __VER__;printf("IDE版本:%d
", IDEVersion);

輸出:

IDE版本:7080004

二、可變參數(shù)

我們?cè)趯W(xué)習(xí)C語(yǔ)言的時(shí)候,都知道printf是可變參數(shù)的函數(shù):

char a = 1;char b = 2;char c = 3;printf("a = %d
", a);printf("a = %d; b = %d
", a, b);printf("a = %d; b = %d; c = %d
", a, b, c);

上面就是可變參數(shù)printf的例子,也就是說(shuō)參數(shù)可以一個(gè)也可以多個(gè)。

而接下來(lái)說(shuō)的__VA_ARGS__,就是一個(gè)可變參數(shù)宏,與printf中可變參數(shù)的宏定義一個(gè)道理,是新C99規(guī)范中增加的。

1.關(guān)于__VA_ARGS__

__VA_ARGS__它是一個(gè)可變參數(shù)的宏,就是將左邊宏中“...” 的內(nèi)容原樣抄寫(xiě)在右邊 __VA_ARGS__ 所在的位置。

要注意的是,printf 的輸出格式是括號(hào)內(nèi)左邊是字符串,右邊是變量,而且右變量與左輸出格式是一一對(duì)應(yīng)的,不對(duì)應(yīng)就會(huì)出錯(cuò)??梢詤⒖聪旅婺莻€(gè)例子, __VA_ARGS__其實(shí)是遵循了printf的格式。

...缺省號(hào)代表一個(gè)可以變化的參數(shù)表。使用保留名 __VA_ARGS__ 把參數(shù)傳遞給宏。當(dāng)宏的調(diào)用展開(kāi)時(shí),實(shí)際的參數(shù)就傳遞給 printf()了。

2.實(shí)例說(shuō)明

#define SENSOR_Printf(...) printf("--SENSOR--"__VA_ARGS__)int TemperatureVal = 25;SENSOR_Printf("溫度 = %d℃

", TemperatureVal);

輸出結(jié)果:

--SENSOR--溫度 = 25℃

用心的朋友可能會(huì)猜測(cè)的到:“...”類似等于“__VA_ARGS__”。

從例子中我們可以看得出來(lái),__VA_ARGS__的用途,主要是用于可變參數(shù)的函數(shù)。我們使用較多的printf就是最常見(jiàn)的一個(gè)。

如果我們的工程很龐大,我們就可以將打印信息分類,這樣的好處就是方便我們識(shí)別各類打印信息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎ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

    文章

    7604

    瀏覽量

    136839
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1945

    瀏覽量

    34740

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

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言環(huán)境下訪問(wèn)特殊功能寄存器sfr的經(jīng)驗(yàn)

    單片機(jī)的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語(yǔ)言環(huán)境下對(duì)其訪問(wèn)歸納起來(lái)有兩種方法
    的頭像 發(fā)表于 11-10 09:46 ?9409次閱讀
    在<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>環(huán)境下訪問(wèn)<b class='flag-5'>特殊功能</b>寄存器sfr的經(jīng)驗(yàn)

    單片機(jī)的一些特殊功能寄存器定義

    #include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義typedef
    發(fā)表于 12-02 08:11

    單片機(jī)的一些特殊功能寄存器

    #include “reg51.h” //此文件中定義了單片機(jī)的一些特殊功能寄存器#include “intrins.h”typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明
    發(fā)表于 12-07 13:22

    單片機(jī)的一些特殊功能寄存器定義

    #include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器#include //因?yàn)橐玫阶笥乙坪瘮?shù),所以加入這個(gè)頭文件#define led P2//將
    發(fā)表于 01-06 07:49

    電源管理特殊功能寄存器PCON介紹

    電源管理特殊功能寄存器 PCON介紹:CMOS 型的MCS-51單片機(jī) 具有空閑和掉電兩種低功耗方式,其中空閑狀態(tài)也稱作cpu睡眠狀態(tài)PCON 字節(jié)地址是0x87有6個(gè)功能位:SMOD X X X
    發(fā)表于 01-25 06:45

    GD32F310開(kāi)發(fā)板串口的一些特殊功能介紹

    串口主要用于通信和調(diào)試信息輸出,今天仔細(xì)觀察GDF310的數(shù)據(jù)手冊(cè)發(fā)現(xiàn)一些特殊功能:1、自動(dòng)波特率檢測(cè);2、數(shù)據(jù)發(fā)送/接受,高位在前/后;3、數(shù)據(jù)位反轉(zhuǎn);4、TX/RX管腳交換。針對(duì)以上的5個(gè)特殊
    發(fā)表于 09-22 15:40

    CH582如果打印一些特殊功能按鍵應(yīng)該怎么修改呢?

    使用CH582開(kāi)發(fā)板燒錄HostU2Enum代碼后,USB2插入鍵盤(pán),使用串口打印鍵值,音量加減等一些特殊功能按鍵沒(méi)有打印出,請(qǐng)問(wèn)官方如果打印這些特殊功能按鍵應(yīng)該具體怎么修改呢?
    發(fā)表于 10-09 07:19

    USB鍵盤(pán)特殊功能鍵的實(shí)現(xiàn)

    USB鍵盤(pán)特殊功能鍵的實(shí)現(xiàn) 本文較為詳盡地介紹了在USB多媒體鍵盤(pán)系統(tǒng)中,特殊功能鍵的實(shí)現(xiàn)方法。關(guān)鍵詞: 通用串行總線;系統(tǒng)特殊功
    發(fā)表于 09-26 17:53 ?2402次閱讀
    USB鍵盤(pán)<b class='flag-5'>特殊功能</b>鍵的實(shí)現(xiàn)

    數(shù)碼相機(jī)特殊功能

    數(shù)碼相機(jī)特殊功能              特殊功能個(gè)很抽象的概念,對(duì)于每臺(tái)數(shù)碼相機(jī),如果沒(méi)有一兩個(gè)亮點(diǎn),難以吸
    發(fā)表于 12-18 15:02 ?399次閱讀

    佳能數(shù)碼相機(jī)特殊功能

    佳能數(shù)碼相機(jī)特殊功能              能令佳能引以為豪的“特殊功能”應(yīng)該是他的DiGIC技術(shù)和iSPA技術(shù)。
    發(fā)表于 12-18 15:10 ?355次閱讀

    什么是手機(jī)特殊功能

    什么是手機(jī)特殊功能         
    發(fā)表于 12-19 15:07 ?871次閱讀

    C51單片機(jī)特殊功能寄存器的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是C51單片機(jī)特殊功能寄存器的詳細(xì)資料說(shuō)明。
    發(fā)表于 04-12 18:27 ?4次下載
    <b class='flag-5'>C</b>51單片機(jī)<b class='flag-5'>特殊功能</b>寄存器的詳細(xì)資料說(shuō)明

    邏輯電平之間的特殊功能互連

    本篇主要介紹邏輯互連中的一些具有特殊功能的互連。這些特殊功能包括總線保持、串聯(lián)阻尼電阻、熱插拔等。
    發(fā)表于 01-07 16:30 ?22次下載
    邏輯電平之間的<b class='flag-5'>特殊功能</b>互連

    【硬見(jiàn)小百科】單片機(jī)的特殊功能寄存器

    在單片機(jī)中有一些獨(dú)立的存儲(chǔ)單元是用來(lái)控制這些器件的,被稱之為特殊功能寄存器(SFR)。<特殊功能寄存器地址映象表()><特殊功能
    發(fā)表于 12-20 19:15 ?14次下載
    【硬見(jiàn)小百科】單片機(jī)的<b class='flag-5'>特殊功能</b>寄存器

    C語(yǔ)言和STM32學(xué)習(xí)的一些學(xué)習(xí)筆記

    自己總結(jié)的一些C語(yǔ)言和STM32F1學(xué)習(xí)的一些筆記,適合想快速了解學(xué)習(xí)C語(yǔ)言和STM32單片機(jī)的
    發(fā)表于 03-24 14:53 ?36次下載