Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать. В хедере — преступное злоупотребление одно- и две-буквенными макросами и typedef-ами, функции из трех букв, типонебезопасная линковка и прочие прелести. Кому приходилось с таким иметь дело, делитесь мыслями. У меня есть пара идей, и я их опишу после.
Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Здравствуйте, uncommon, Вы писали:
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Этот код
// remove more clutter#define O printf
#define R return
#define Z static
#define P(x,y) {if(x)R(y);}
#define U(x) P(!(x),0)
#define SW switch
#define CS(n,x) case n:x;break;
#define CD default
А нельзя его выкинуть на помойку завернуть в отдельный сишник, и проэкспортировать оттуда в виде вызовов функций и/или методов каких-нибудь классов?
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Здравствуйте, uncommon, Вы писали:
U>Дано: вот такой хедер: https://raw.githubusercontent.com/KxSystems/kdb/master/c/c/k.h
U>Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать. В хедере — преступное злоупотребление одно- и две-буквенными макросами и typedef-ами, функции из трех букв, типонебезопасная линковка и прочие прелести. Кому приходилось с таким иметь дело, делитесь мыслями. У меня есть пара идей, и я их опишу после.
Тут же есть разъяснения https://github.com/KxSystems/kdb/blob/master/c/c/readme.txt
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем?
Чтоб потом так писать:
Если интересно то используйте препроцессор он развернёт макросы. U>Какое можно найти объяснение такому стилю программирования?
Чтоб туда руками туда не лазили. Или автор раньше на фортране много писал U>Ведь кроме как говном, это назвать никак нельзя.
Можно: минификация и обфускация.
Разъяснения, как использовать эти макросы, но не почему они такие кривые. Кстати, этот readme напоминает разве что заметки на полях, а не осмысленную документацию.
U>>Но как бы то ни было, мне не дает покоя один вопрос: зачем? _>Чтоб потом так писать:
И что сделает любой нормальный человек с таким кодом? Выбросит его на помойку и перепишет. Потому что разобраться в нём, даже если он и работает, это всё равно, что копаться в говне. Что я, кстати, и сделал с этим кодом перво-наперво. Единственно разумное решение.
_>Если интересно то используйте препроцессор он развернёт макросы.
Нет, мне не интересно. А что кому-то было интересно?
U>>Какое можно найти объяснение такому стилю программирования? _>Чтоб туда руками туда не лазили.
Зачем обфуцировать код предлогаемый клиентам для линковки со своим продуктом? Чтобы все более-менее разумные клиенты поразбежались?
Здравствуйте, Pzz, Вы писали:
U>>Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать.
Pzz>А нельзя его выкинуть на помойку завернуть в отдельный сишник, и проэкспортировать оттуда в виде вызовов функций и/или методов каких-нибудь классов?
Правильно. Написать свой собственный хедер для их библиотеки, а их хедер никуда вообще не включать. Благодаря тому, что все функции там extern "C", всё слинкуется отлично, даже если поместить эти функции в namespace, а типы параметров не будут совпадать. Главное, чтобы в бинарном представлении они были идентичны.
Была ещё идея такая:
namespace crappy_library
{
#include"k.h"
}
#undef Z
//...undef all those crappy macros
Но всё равно прийдётся возиться с их структурами. Поэтому я решил переписать хедер. Благо мне нужны всего две функции и одна структура.
Здравствуйте, lpd, Вы писали:
lpd>Здравствуйте, uncommon, Вы писали:
U>>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Здравствуйте, uncommon, Вы писали:
U>Дано: вот такой хедер: https://raw.githubusercontent.com/KxSystems/kdb/master/c/c/k.h
U>Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать. В хедере — преступное злоупотребление одно- и две-буквенными макросами и typedef-ами, функции из трех букв, типонебезопасная линковка и прочие прелести. Кому приходилось с таким иметь дело, делитесь мыслями. У меня есть пара идей, и я их опишу после.
Не используй этот хэдер. Он нужен для того чтобы писать код в их стиле. Наверняка есть нормальный API для простых смертных.
Здравствуйте, uncommon, Вы писали:
U>И что сделает любой нормальный человек с таким кодом? Выбросит его на помойку и перепишет. Потому что разобраться в нём, даже если он и работает, это всё равно, что копаться в говне. Что я, кстати, и сделал с этим кодом перво-наперво. Единственно разумное решение.
Бывает еще что решения принимает другой человек которого что там внутри не интересует.
U>>>Какое можно найти объяснение такому стилю программирования? _>>Чтоб туда руками туда не лазили.
U>Зачем обфуцировать код предлогаемый клиентам для линковки со своим продуктом? Чтобы все более-менее разумные клиенты поразбежались?
Безнес, ничего личного. Вам то это зачем-то понадобилось.
Здравствуйте, uncommon, Вы писали:
_>>Если интересно то используйте препроцессор он развернёт макросы.
U>Нет, мне не интересно. А что кому-то было интересно?
Это может помочь переписать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, uncommon, Вы писали:
U>Дано: вот такой хедер: https://raw.githubusercontent.com/KxSystems/kdb/master/c/c/k.h
Это ж, kdb у них все такое. Посомотри, например, на java код. Стиль у них такой, сделали такое, чтобы можно было в q-стиле писать.
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
просто считай, что это не "c", а "q", другой язык.
Здравствуйте, uncommon, Вы писали:
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Это Kx Database, она вся такая, полностью. Это вы еще их внутренний язык не видели.
Здравствуйте, uncommon, Вы писали:
U>Дано: вот такой хедер: https://raw.githubusercontent.com/KxSystems/kdb/master/c/c/k.h
U>Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать. В хедере — преступное злоупотребление одно- и две-буквенными макросами и typedef-ами, функции из трех букв, типонебезопасная линковка и прочие прелести. Кому приходилось с таким иметь дело, делитесь мыслями. У меня есть пара идей, и я их опишу после.
Макросной магии здесь нет, поэтому достаточно один раз поработать препроцессором и перепилить на более-менее чистый С++.
Вместо дефайнов констант — сделать constexpr'ы или даже в enum засунуть.
Вместо дефайнов с переменной x — сделать пачку инлайн-функций.
Оформить всё это в какое-нибудь namespace Kx и наслаждаться.
И выложить в public domain, чтобы у авторов Kdb немножко пригорело от счастья.
U>Но как бы то ни было, мне не дает покоя один вопрос: зачем? Какое можно найти объяснение такому стилю программирования? Ведь кроме как говном, это назвать никак нельзя.
Язык K, сэр. Помехи на телеграфной линии. Скажи спасибо, что авторы забросили иероглифику APL до того, как был создан юникод.
Здравствуйте, uncommon, Вы писали:
U>Дано: вот такой хедер: https://raw.githubusercontent.com/KxSystems/kdb/master/c/c/k.h
U>Требуется: использовать его в своем проекте и (самое главное) ничего при этом не сломать. В хедере — преступное злоупотребление одно- и две-буквенными макросами и typedef-ами, функции из трех букв, типонебезопасная линковка и прочие прелести. Кому приходилось с таким иметь дело, делитесь мыслями. У меня есть пара идей, и я их опишу после.
делаешь длинный заголовок для включения заголовка
и ещё один — для зачистки гавна
вначале, проверяешь все макросы, включённые в код, если они определены — присваиваешь им очень длинные разборчивые имена, вроде MY_MACROS_IN_FILE_3DPARTY_INCLUDE_DKJR382R8_kG
Потом андефишь исходные макросы
Потом подключаешь код
делаешь макросам переопределения на нормальные имена
после использования, подключаешь хедер зачистки, где возвращаешь значения сохранённым макросам, а прочие просто андефишь
а вообще, лучше его переписать нахрен с помощью средств автозамены в IDE, заодно и проконтролируешь конфликты
Здравствуйте, uncommon, Вы писали:
К>>И выложить в public domain, чтобы у авторов Kdb немножко пригорело от счастья.
U>Я тоже об этом подумываю. Более менее уже переписал всё, что нужно для моих целей. Но думаю, kdb-шники не оценят