Обработка одноименных символов в C - PullRequest
0 голосов
/ 07 мая 2020

Предположим, что у меня есть приложение, написанное на C, которое должно анализировать некоторые данные blob. Процесс синтаксического анализа выполняется целой специальной библиотекой (у меня есть доступ к этому библиотечному коду). Поскольку этот BLOB-объект имеет версии, мне нужно поддерживать, скажем, две его версии одновременно. Рабочий процесс выглядит примерно так:

  1. 'v1' отсутствует -> библиотека поддерживает 'v1'
  2. 'v2' отсутствует -> библиотека теперь поддерживает 'v2' и 'v1'
  3. 'v3' отсутствует -> библиотека теперь поддерживает 'v3' и 'v2'

и т. Д.

Основная проблема заключается в том, что большинство символы в библиотеке для 'v2', например, также присутствуют в библиотеке 'v1' с тем же прототипом функции.

Первой мыслью было использовать что-то вроде пространств имен в C ++, чтобы иметь что-то вроде:

/app/src/lib_v1/parser.c

void _parse_blob(char* blob){ //data parsing code for v1}
/////////////////////////////


/app/src/lib_v2/parser.c

void _parse_blob(char* blob){ //data parsing code for v2}
////////////////////////////


/app/src/main.c

//Pseudo-code
char* data;
if(_check_version(data) == 'v1')
   parser.v1._parse_blob(data);
else
   parser.v2._parse_blob(data);

Но я не знаю, можно ли добиться чего-то подобного в C без изменения чего-либо в коде «исходящей» библиотеки (v1 в данном случае), поскольку весь этот код уже был протестирован, и его изменение сделало бы недействительными все тесты выпуска.

Другая идея заключалась бы в том, чтобы разделить код обеих библиотек на две динамические c связанные библиотеки и загружать / выгружать их при необходимости, но не Я не знаю, может ли это сработать или эффективно.

Что бы Как лучше всего подойти к этой проблеме?

...