В C у меня есть функция, которая реализует процедуры шифрования и дешифрования блочного шифра.Чтобы поддерживать общее соглашение об именах и использовании и оставить открытой возможность разделения подпрограмм на две различные функции позже, я сделал следующее:
void cipher(char *out, const char *in);
#define encrypt cipher
#define decrypt cipher
Это прекрасно работает, за исключением того, чтоЯ действительно хотел бы скрыть фактическую функцию (cipher
), чтобы люди использовали encrypt
или decrypt
.Прямо сейчас, cipher
является частью общедоступного интерфейса, поэтому, если я решу позже разделить его на две разные функции и удалить cipher
, строго говоря, я нарушаю интерфейс.Но если я могу скрыть cipher
, так что только encrypt
и decrypt
являются частью интерфейса, я буду в порядке.
Единственный вариант, который я до сих пор придумал, это make cipher
static и реализуют фактические функции для encrypt
и decrypt
для вызова cipher
, но я не уверен, что дополнительные издержки действительно того стоят (я пытаюсь сохранить размер кода как можно более строгим,и у меня есть несколько случаев этой же проблемы).
Есть ли что-то, что я могу сделать с указателями на функции?Есть еще идеи?