這裏是.c文件的相關片段,我試圖讓感:瞭解C代碼用typedef和結構
背景你讀了段之前:
一個線程是一個套接字上偵聽,一旦它得到一個包。它讀取數據(這是命令的名稱),並根據數據(命令)執行一個操作。
#define HANDLER(cmd) {#cmd, cmd}
handler_t table[] = {
HANDLER(LOAD),
HANDLER(STORE),
HANDLER(REMOVE),
};
typedef struct _handler_t
{
char cmd[CMD_LEN];
void (*handler)(int argc, char *argv[], int sockfd);
} handler_t;
for (i = 0; i < sizeof(table)/sizeof(handler_t); i++)
if (strcmp(cmd, table[i].cmd) == 0) // where cmd is an array whose content were read from socket
table[i].handler(argc, argv, sockfd);
爲什麼sizeof(table)/sizeof(handler_t)
?
爲什麼table[i].handler(argc, argv, sockfd);
?
當調用函數指針時,#define扮演什麼角色? –
@ Myth17在函數指針的調用中,宏替換沒有特殊的作用,它在預處理時完成,用它們的值替換宏(在問題中未顯示),然後查看它是否清晰。 –
#define使聲明表更容易。 – woolstar