У меня есть функция C, которая записывает некоторые данные в текстовый файл. Данные состоят из чисел с плавающей точкой, целых и строк.
это выглядит примерно так:
writeAsTextFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName);
для этого я использую вызовы fprintf;
Теперь я хотел бы написать те же данные, но в двоичном виде. Я мог бы написать вторую функцию writeAsBinaryFile и использовать вместо нее вызовы fwrite. Но тогда каждый раз, когда я буду вносить изменения в конструкцию mystruct_t, мне придется изменять и writeAsTextFile, и writeAsBinaryFile. И, конечно, соответствующие readAsTextFile и readAsBinaryFile. Кроме того, это увеличит размер кода.
Поэтому я хотел бы иметь одну единственную универсальную функцию с одним аргументом bin-or-text, который бы выглядел так:
writeToFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName, myEnumType_t eOption)
где option будет enum eBin = 0 и eTxt = 1, например. В зависимости от eOption функция будет записывать двоичные или текстовые данные.
Я не уверен, что было бы лучшим способом добиться этого. Должен ли я использовать fwrite также для написания текста, следует ли мне использовать макросы? (Я где-то видел использование директивы ##, но никогда не использовал ее) или инструкции switch / ifs везде, где мне нужно записать файл? Или я должен написать обобщенную функцию, такую как
myWriteFunction( void *data, char const type, myEnumType_t eOption)
что будет вызвано writeToFile?
Я не очень хорошо знаком с использованием fread / fwrite и макросов, поэтому приветствуются любые рекомендации, идеи и т. Д.,
Спасибо
Баба