一位同事請我在memcached中解釋一下C代碼。我承認我也不明白這一點。c函數類似的宏與參數列表,但沒有替換列表?
它與C函數類似的宏定義的參數沒有替換列表。例如,起始於線2751在memcached.c:
if (return_cas)
{
MEMCACHED_COMMAND_GET(c->sfd, ITEM_key(it), it->nkey,
it->nbytes, ITEM_get_cas(it));
/* Goofy mid-flight realloc. */
if (i >= c->suffixsize) {
char **new_suffix_list = realloc(c->suffixlist,
sizeof(char *) * c->suffixsize * 2);
if (new_suffix_list) {
c->suffixsize *= 2;
c->suffixlist = new_suffix_list;
MEMCACHED_COMMAND_GET()在trace.h裏上線23所定義:
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)
C代碼宏功能狀帶參數的定義,確定。沒有替換名單。
上memcached.c CPP的輸出顯示函數宏變成「;」:
# 2751 "memcached.c"
if (return_cas)
{
;
if (i >= c->suffixsize) {
char **new_suffix_list = realloc(c->suffixlist,
sizeof(char *) * c->suffixsize * 2);
if (new_suffix_list) {
c->suffixsize *= 2;
c->suffixlist = new_suffix_list;
沒有人有任何瞭解爲什麼程序員將包括函數宏沒有替換列表像MEMCACHED_COMMAND_GET()那樣對生成的代碼沒有影響?這樣做的目的是什麼?提前謝謝你。
你可能想看看這個問題:http://stackoverflow.com/questions/5501990/what-can-the-macros-below-be-used-for – Jason 2012-02-16 16:37:39
@Jason非常好,謝謝。這就說得通了。我從來沒有想過要在MEMCACHED_COMMAND_GET本身上搜索,只搜索包含「類似功能的宏」的術語。我感謝你指引我朝着正確的方向。 – 2012-02-16 16:44:03