Сотрудник попросил меня объяснить немного кода на C в memcached . Я нахожусь в точке, где я признаю, что я тоже не понимаю.
Это относится к определениям макросов, подобным функциям 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 () определяется в строке 23 в trace.h:
#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4)
Определение макроса как функция с аргументами, ок. Нет списка замены.
Вывод cpp в memcached.c показывает, что подобный функции макрос превращается в ';':
# 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 (), который не влияет на создаваемый код? Какую цель служит этим? Заранее благодарим.