C語言中的一些巨集定義和常用的函式
阿新 • • 發佈:2019-01-01
文章目錄
一、typeof 關鍵字
如果你是 C++ 程式設計師,應該接觸過 C++11 裡的 decltype 操作符,它的作用是自動推導表示式的資料型別,以解決泛型程式設計中有些型別由模板引數決定而難以(甚至不可能)表示的問題。其實這個特性在 C 語言中也早有類似的實現,GNU C 標準中的一個擴充套件特性 typeof 作用與 decltype 類似 。
__typeof__ (ret) errnum = (ret);
二、snprintf()函式的作用
#include<stdio.h>
int snprintf(char* dest_str,size_t size,const char* format,...);
【函式功能】:
先將可變引數 “…” 按照format的格式格式化為字串,然後再將其拷貝至dest_str中。
如果格式化後的字串長度小於size,則將字串全部拷貝至dest_str中,並在字串結尾處加上‘\0’; 如果格式化後的字串長度大於或等於size,則將字串的(size-1)拷貝至dest_str中,然後在字串結尾處加上’\0’. 函式返回值是 格式化字串的長度。
三、__builtin_expect的作用
__builtin_expect(errnum != 0, 0)
這個指令是gcc引入的,作用是"允許程式設計師將最有可能執行的分支告訴編譯器"。這個指令的寫法為:__builtin_expect(EXP, N)
。意思是:EXP==N的概率很大。一般的使用方法是將__builtin_expect指令封裝為LIKELY和UNLIKELY巨集。
四、C語言中常用的預定義
__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) { \
printf(":failed(%d)\n", ret); \
return ret; \
} else { \
printf(":ok\n"); \
}