1.redis-3.0\src\redis.h
#define redisdebug(fmt, ...) \
printf("debug %s:%d > " fmt "\n", __file__, __line__, __va_args__)
#define redisdebugmark() \
printf("-- mark %s:%d --\n", __file__, __line__)
2.
#ifdef debug
#define printf(fmt, args...) printf(fmt, ##args)
#else
#define printf(fmt, args...)
3.
#define debug(format, args...) fprintf(stderr, format, ##args)
#define debug(format, args...) fprintf(stderr, format, args)
使用:macro.c
#include #define debug(format, args...) fprintf(stderr, format, args)
int main(void)
gcc編譯上述**,編譯結果如下:
說明:如果使用args,而不是##args,debug巨集不接受debug("world\n");這種沒有可變引數的呼叫。
在網上搜這種情況下##的作用,有一種解釋是:這裡的##起到把前面多餘的","去掉的作用
C 中內聯函式與巨集
c 內聯函式 inline 介紹 介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 define table comp x x 0?x 0 就定義了乙個巨集。...
巨集和c 中的inline內聯函式
inline函式是c 引入的機制,目的是解決使用巨集定義的一些缺點。1.為什麼要引入內聯函式 內聯函式的作用 用它替代巨集定義,消除巨集定義的缺點。巨集定義使用預處理器實現,做一些簡單的字元替換因此不能進行引數有效性的檢測。另外它的返回值 不能被強制轉換為可轉換的合適 型別,且c 中引入了類及類的訪...
C函式和巨集中的可變引數
一 呼叫慣例 函式的呼叫方和被呼叫方對函式如何呼叫應該有統一的理解,否則函式就無法正確呼叫。比如foo int n,int m 呼叫方如果認為壓棧順序是m,n,而foo認為壓棧順序是n,m,那麼這個函式就不會呼叫成功。因此,函式的呼叫方和被呼叫方對於函式如何呼叫需要有個明確的約定,雙方都遵守同樣的約...