1. 程式人生 > >C語言中的一些巨集定義和常用的函式

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

文章目錄

一、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"); \
                }