C語言中幾種特殊標準定義和用法

C語言已經連續幾個月佔領 TIOBE 編程語言排行榜首,成爲最受歡迎的編程語言了。

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

C語言之因此那麼受歡迎,除了C語言歷史悠久以外,還有它具備一些編程語言沒有的功能。那麼,今年咱們就來了解一下C語言的一些特殊功能。1、ANSI C特殊標準定義羅列一些常見的特殊定義:

 

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

__LINE__:正在編譯文件的行號編程語言

__DATE__:編譯時刻的日期字符串 如「July 19 2019」ide

__TIME__:編譯時刻的時間字符串  如」22:00:00「函數

 

代碼:學習

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

 

提示:__LINE__是整型數據;其實除了這些還有不少相關的定義,好比:1.__FUNCTION__:函數名,類型爲:字符常量指針。
  •  
char const* BuildFunName = __FUNCTION__;printf("函數名稱爲:%s\n", BuildFunName);
2.__VER__:IDE版本信息,類型爲:整型。如我用的IAR版本爲:7.80.04,以下圖: watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=代碼:
  •  
int  IDEVersion = __VER__;printf("IDE版本:%d\n", IDEVersion);

輸出:ui

  •  
IDE版本:7080004

 

2、可變參數

咱們在學習C語言的時候,都知道printf是可變參數的函數:3d

 

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

上面就是可變參數printf的例子,也就是說參數能夠一個也能夠多個。指針

 

而接下來講的__VA_ARGS__,就是一個可變參數宏,與printf中可變參數的宏定義一個道理,是新C99規範中增長的。blog

 

1.關於__VA_ARGS__字符串

__VA_ARGS__它是一個可變參數的宏,就是將左邊宏中「...」 的內容原樣抄寫在右邊 __VA_ARGS__ 所在的位置。

 

要注意的是,printf 的輸出格式是括號內左邊是字符串,右邊是變量,並且右變量與左輸出格式是一一對應的,不對應就會出錯。能夠參看下面那個例子, __VA_ARGS__實際上是遵循了printf的格式。

 

...缺省號表明一個能夠變化的參數表。使用保留名 __VA_ARGS__ 把參數傳遞給宏。當宏的調用展開時,實際的參數就傳遞給 printf()了。

 

2.實例說明

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

 

輸出結果:

  •  
--SENSOR--溫度 = 25℃

 

用心的朋友可能會猜想的到:「...」相似等於「__VA_ARGS__」。

 

從例子中咱們能夠看得出來,__VA_ARGS__的用途,主要是用於可變參數的函數。咱們使用較多的printf就是最多見的一個。

 

若是咱們的工程很龐大,咱們就能夠將打印信息分類,這樣的好處就是方便咱們識別各種打印信息。

 

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 


 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
相關文章
相關標籤/搜索