The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.58"
Отправлено Совершенно другой аноним, 17-Янв-22 11:36 
>[оверквотинг удален]
>> Одна - это функция проверки пути в XML DOM,
> Это в смысле элементы пути передаются отдельными аргументами? Если так, то в
> чём была мотивация использовать эллипсис, если эллипсис ограничивает длину пути, который
> возможно передать: если в коде вызова такой функции три аргумента-элемента пути,
> значит она проверит путь длиной в три элемента. То есть длина
> проверяемого пути должна быть известна на этапе компиляции. Это ограничение никак
> не мешало? Его при этом легко снять, передавая массив элементов пути:
> int check_path(size_t length, DOMElement path[]);
> Или я не правильно понял, в чём собственно идея эллипсиса в такой
> функции? Если так, то в чём?

интерфейс:
int xml_check_path(struct xml_node* xr, struct xml_node** xn, unsigned int nt, ...);

вызов:
    if (xml_check_path(x.x_tree, &xr, 3, "root", "tpl", "config") != 3)

Да, ничто не мешало сделать:

int xml_check_path(struct xml_node* xr, struct xml_node** xn, unsigned int nt, char* attr[]);

и вызывать:
char* attrs[] = { "root", "tpl", "config" };
...

    if (xml_check_path(x.x_tree, &xr, sizeof(attrs) / sizeof(attrs[0]), attrs) != 3)

но согласитесь, код в таком случае не такой наглядный. В варианте с ... принципе можно было и без nt обойтись, а последним передавать NULL.

>> вторая - функция установки значения макроса в макробиблиотеке,
> Непонятно совершенно. Что значит "установка значения макроса"? Что такое "макробиблиотека"?
> Какое это отношение имеет к эллипсису?

Есть библиотека, реализующая собственный макроязык. В частности у неё есть API:

int macro_set(MACRO m, const char* macro, int lmacro, unsigned int flags, ...);

Макросы бывают разных типов (строковые, целочисленные, с плавающей запятой).

>> третья - обобщённый поиск сведений по специфичной базе сведений.
> А тут при чём эллипсис?

При том, что есть одна функция поиска по такой базе (это не СУБД, а просто набор сведений о блоках, каналах, датчиках с определённой иерархией):

int pod2_GetInfoBy(CONF2 h,
         struct pod_block* InfoConfigTypeBlockV,
         struct pod_channel* InfoConfigChannelV,
         struct pod_gauge*     InfoConfigGaugeV,
         unsigned int field, ... );

и куча удобных обёрток:

#define pod2_GetBlockInfoByTypeBlk2(h, tb, ib) \
        pod2_GetInfoBy2((h), (ib), NULL, NULL, 1, (tb))

#define pod2_GetBlockInfoByCodTypeBlk2(h, cb, ib) \
        pod2_GetInfoBy2((h), (ib), NULL, NULL, 2, (unsigned int)(cb))

#define pod2_GetBlockInfoByTypeBlkTypePSO2(h, tb, tp, ib) \
        pod2_GetInfoBy2((h), (ib), NULL, NULL, 5, (tp), (tb))

#define pod2_GetBlockInfoByCodTypeBlkTypePSO2(h, cb, tp, ib) \
        pod2_GetInfoBy2((h), (ib), NULL, NULL, 6, (tp), (unsigned int)(cb))

#define pod2_GetBlockInfoByTypePSO2(h, tp, ib) \
        pod2_GetInfoBy2((h), (ib), NULL, NULL, 4, (tp))

>[оверквотинг удален]
> использую эллипсис", я делаю вывод, что ты не умеешь писать на
> C. Именно поэтому мой вопрос не о том, как часто ты
> используешь эллипсис, а о том, как ты его используешь: в конце-концов
> я могу ошибаться в отношении эллипсиса, и мне было бы интересно
> пофиксить свою ошибку. Но для этого мне нужен вполне реальный конкретный
> пример, в котором эллипсис будет действительно лучше всех остальных способов. Если
> тебе интересно в этом поучаствовать, ты можешь сочинить пример, или позаимствовать
> из чужого кода -- я не против. Но это должен быть
> реальный пример. Лучше конечно несколько, чтобы можно было бы оценить частоту
> того, как часто такое может быть нужно.

Естественно, можно и без "...", так и без многих вещей можно жить и заменять их каким-либо другими, которые есть.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру