C. "Перегрузка" функции для массивов разной длины

Есть структура

typedef struct
{
    int serviceRef;
    char buffer[128];
} WriteBlob;

Есть функция, которая внутри обрабатывает эту структуру ( void HandleBlob(WriteBlob* blob)). Проблема в том, что объект этой структуры передается по сети. И 128 байтов не всегда нужно передавать, т.к. полезной нагрузки может быть 20 байтов, а передается все равно 128. Так вот вопрос, как реализовать работу этой структуры\функции для разных размеров буфера? Например, я сделаю структуры WriteBlob128, WtireBlob80, WriteBlob64, WriteBlob32, WriteBlob16. Но тогда, мне нужно будет добавлять столько же реализаций функции для каждого из типов. Можно как-нибудь, с помощью макросов, сделать так, чтобы пользователь определял структуру, например, WriteBlob32, вызывал функцию (макрос) HandleBlob, а компилятор уже сам решит, на основе переданного параметра, какую функцию вызывать...а еще лучше, чтобы пользователь создает объект WriteBlob64, а компилятор делает из этого структуру.

typedef struct
{
    int serviceRef;
    char buffer[64];
} WriteBlob; 

Язык - С 99. Дополнительное требование - размер структуры должен быть известен на момент компиляции.


Ответы (1 шт):

Автор решения: Qwertiy

Популярный подход в winapi - первым полем в структуре лежит её размер в байтах.

→ Ссылка