テキストファイルにデータを書き込むC関数があります。データは、float、int、および文字列で構成されています。次のようになります。
writeAsTextFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName);
これを行うために、fprintfへの呼び出しを使用します。
ここで、同じデータをバイナリとして書き込みたいと思います。2番目の関数writeAsBinaryFileを記述し、代わりにfwriteの呼び出しを使用できます。ただし、mystruct_tのデザインを変更するたびに、writeAsTextFileとwriteAsBinaryFileの両方を変更する必要があります。そしてもちろん、対応するreadAsTextFileとreadAsBinaryFile。これに加えて、これによりコードサイズが増加します。したがって、次のような1つのbin-or-text引数を持つ1つのジェネリック関数が必要です。
writeToFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName, myEnumType_t eOption)
ここで、オプションは列挙型eBin=0およびeTxt=1などです。eOptionに応じて、関数はバイナリデータまたはテキストデータを書き込みます。
これを達成するための最良の方法が何であるかはわかりません。テキストとしての書き込みにもfwriteを使用する必要がありますか、マクロを使用する必要がありますか?(どこかで##ディレクティブの使用を見たことがありますが、使用したことはありません)、またはファイルに書き込む必要があるすべての場所でswitch / ifsステートメントを使用しますか?または、次のようなジェネリック関数を記述しますか
myWriteFunction( void *data, char const type, myEnumType_t eOption)
それはwriteToFileによって呼び出されますか?
私はfread/fwriteとマクロの使用にあまり慣れていないので、ベストプラクティスのコメント、アイデアなどを歓迎します。
ありがとう
馬場