Здесь представлены соответствующие фрагменты файла .c я пытаюсь понять:Понимание C код с ЬурейеЕ и структуры
фона, прежде чем читать фрагмент кода:
Нить прослушивания на сокете , как только он получит пакет. Он считывает данные (это имя команды), и в зависимости от данных (команды) выполняется действие.
#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