C語言中的一些巨集定義和常用的函式

2021-09-05 10:20:49 字數 1426 閱讀 2156

如果你是 c++ 程式設計師,應該接觸過 c++11 裡的decltype操作符,它的作用是自動推導表示式的資料型別,以解決泛型程式設計中有些型別由模板引數決定而難以(甚至不可能)表示的問題。其實這個特性在 c 語言中也早有類似的實現,gnu c 標準中的乙個擴充套件特性typeof 作用與 decltype 類似。

__typeof__ (ret) errnum =

(ret)

;

#include

intsnprintf

(char

* dest_str,size_t size,

const

char

* format,..

.);

【函式功能】:

先將可變引數 「…」 按照format的格式格式化為字串,然後再將其拷貝至dest_str中。

如果格式化後的字串長度小於size,則將字串全部拷貝至dest_str中,並在字串結尾處加上『\0』; 如果格式化後的字串長度大於或等於size,則將字串的(size-1)拷貝至dest_str中,然後在字串結尾處加上』\0』. 函式返回值是 格式化字串的長度。

__builtin_expect

(errnum !=0,

0)

這個指令是gcc引入的,作用是"允許程式設計師將最有可能執行的分支告訴編譯器"。這個指令的寫法為:__builtin_expect(exp, n)。意思是:exp==n的概率很大。一般的使用方法是將__builtin_expect指令封裝為likely和unlikely巨集。

__line__:當前程式行的行號,表示為十進位制整型常量

__file__:當前源檔名,表示字串型常量

__date__:轉換的日曆日期,表示為mmm dd yyyy 形式的字串常量,

mmm是由asctime產生的。

__time__:轉換的時間,表示"hh:mm:ss"形式的字串型常量,

是有asctime產生的。(asctime貌似是指的乙個函式)

__stdc__:編輯器為iso相容實現時位十進位制整型常量

__func__:它指示所在的函式

__assert_perror_fail:列印一條包含錯誤碼errnum的錯誤訊息,並終止程式

反斜槓起到換行作用,用於巨集定義和字串換行。其中巨集定義中使用居多。如果一行**有很多元素,導致太長影響閱讀,可以通過在結尾加\的方式,實現換行,編譯時會忽略\及其後的換行符,當做一行處理。

#define check_action_return(expr) \

if (!expr) else

C語言一些不常用的函式和巨集定義說明

一 陣列清空 include include int main void for j 0 j 10 j printf n memset str,0,sizeof str 陣列清空 for i 0 i 500 i 二 char型別轉換int型別 include 需要標頭檔案stdlib.h inclu...

C語言巨集定義的一些用法

do while 0 在巨集定義中合理使用do while 0 可以更規範地使用巨集定義 沒有使用do while 0 前 define led on int main void 多了個分號 使用do while 0 define led on dowhile 0 int main void whi...

c 語言中的巨集定義

巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...