Pull to refresh
-6
0
Иннокентий Алайцев @Wilk

Пользователь

Send message
Спасибо. Про библиотеку в посте упустил.
Здравствуйте.

Про распространяемый пакет C++ понятно. Но скажите, как быть с копированием fontsub.dll (из WinXP- версия файла — 5.1.2.6000.5512) и
msvbvm60.dll? Не нарушет ли это каких-либо лицензий?
Здравствуйте.
Целиком и полностью поддерживаю озвученную Вами позицию относительно удаления закоментированного кода. Однако, я сталкивался с тем, что некоторые разработчики считают, что это код там очень нужен, и если он мне мешает, я могу удалить его в своей локальной копии, а в репозитории пусть лежит всё целиком. Я вижу оправдание этому только в случае, если такой закоментированный код, во-первых, не содержит сложной логики, например, представляет собой какой-то отладочный вывод, который лениво набивать вновь, либо содержит наброски решения с соответствующим комментарием, т.е., фактически, является псевдокодом, и, во-вторых, будет в результате удалён сразу после того, как какая-либо необходимость в нём отпадёт.
Здравствуйте.
Я использую предварительное объявление:
AliceInWonderland.h:
typedef struct Alice Alice_t;

Alice_t* aliceNew ();

void aliceDestroy (Alice_t* o_alice);

size_t aliceSize ();

void rabbitHole (Alice_t i_alice);

private/AliceInWonderland.h:
#include "../AliceInWonderland.h"

struct Alice {
    // ...
}

AliceInWonderland.c:
#include "AliceInWonderland.h"
#include "private/AliceInWonderland.h"

Alice_t* aliceNew () {
    return (Alice_t*) malloc (aliceSize ());
}

void aliceDestroy (Alice_t* o_alice) {
    free (o_alice);
}

size_t aliceSize () {
    return sizeof (Alice_t);
}

void rabbitHole (Alice_t i_alice) {
    // ...
}

Таким образом, определение типа видно только там, где это необходимо. Пользователям же библиотеки известно только о том, что существует такой тип, как Alice_t. Более ничего. Естественно, в случае необходимости доступа к полям возникает необходимость в создании соответствующих функций доступа.
Конечно, решение не идеальное и может создавать лишнюю головную боль, но на данный момент код, в котором я использую такой подход, имеет малый объём, поддерживается только мной и работает.
P.S. Да, я ошибся термином: правильно было сказать не "описание типа" (declaraion), а "определение типа" (definition).
Здравствуйте.
В ряде случаев вопрос с необходимостью использования макроса в нескольких независимых файлах я решаю созданием отдельного заголовочного файла, содержащего только этот макрос. Решение не самое элегантное, однако избавляет от решения сложнейшей задачи — придумывания имения для файла, в котором хранятся различные утилитарные макросы.
В случае, если необходимо объявить какой-либо тип, который будет входить в интерфейс модуля, я стараюсь сделать так, чтобы пользователю описание типа было не видно. Конечно, это маразм и попахивает плюсами головного мозга, однако у меня есть оправдание — я хочу максимально сохранить совместимость между версиями библиотек и избавить себя от необходимости изменять зависимое ПО в случае изменения структуры данных в новой версии библиотеки. Поясню идею: я вижу пользователя библиотеки неплохим парнем, но желающим решить какую-либо задачу попроще либо хитро. Это означает, что пользователь может использовать для работы с объектами типов данных, объявленных в библиотеке, не библиотечные функции. Например, выделять память для объекта самостоятельно, либо использовать напрямую какое-либо поле. Всё бы ничего, но в случае, если структура данных изменится, весь код надо будет исправлять для поддержки работы с новой версией библиотеки.
Кроме того, при использовании такого подхода появляется возможность экспериментировать с типами данных, подменяя их на различные варианты при сборке. Хотя до полноценного решения, аналогичного применяемому в том же ядре Linux и других проектах, использующих объектно-ориентированные техники в C, всё ещё далеко.
Здравствуйте.
Большое Вам спасибо за комментарии к данному произведению искусства.
12 ...
7

Information

Rating
Does not participate
Location
Саратов, Саратовская обл., Россия
Registered
Activity