Выполняя задачу по макросам попался документ о конкатенации макросов. В нем следующий код:
#define COMMAND(NAME) { #NAME, NAME ## _command }
Макрос NAME ранее определен не был. Но, тем не менее, он воспринимается и работает. Объясните, пожалуйста, как это работает, потому что очень интересна данная конструкция, можно найти ей применение в дальнейшем.
Пример взят вот отсюда
// Макрос COMMAND служит для более короткой записи инициализации структуры command
// Например результат следующих записей одинаков:
// COMMAND(name);
// command c = {"name", name_command};
#define COMMAND(NAME) { #NAME, NAME ## _command }
struct command // Структура для хранения некой комманды
{
char *name;
void (*function) (void); // указатель на функцию
};
// инициализация массива комманд
struct command commands[] =
{
COMMAND (quit), // Команда quit
COMMAND (help), // Команда help
...
};
// Предыдущую инициализацию компилятор "превратит" вот в это
struct command commands[] =
{
{ "quit", quit_command },
{ "help", help_command },
...
};
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть площадь заданного размера, на ней указаны N точек, и даны их координатыНужно научиться быстро отвечать на запрос сколько точек находится...
После компилиции выдает ошибку "Это объявление не содержит класс хранения или спецификатор типа"
Реализую протокол RTP, не могу разобраться с RTP Payload Format for H264 Video а если точнее быть то с первыми 4 байтами в CSRC
3дравствуйте, пытаюсь установить библиотеку BLAS в MVS, делаю все по инструкции, остановился на одном моменте(скриншот приложил)