?
Das Beispiel, das du beschreibst, würde sehr gut in ein objektorientiertes Konzept passen, weil man bei größeren Datenmengen (auf die man als Kompressionsbibliothek ja vorbereitet sein muss) im Zweifel die Daten blockweise verarbeiten will und dementsprechend einen Zustand halten muss. Mal ganz simpel hingekladdet:
typedef struct { ... } compressor;
void compressor_init (compressor *context, FILE *output);
void compressor_compress(compressor *context, unsigned char const *data_block, size_t block_len);
void compressor_finalise(compressor *context);
...
compressor comp;
FILE *fd, *fd_out;
ssize_t r;
char buffer[512];
fd = fopen("uncompressed.txt", "rb");
fd_out = fopen("compressed.dat", "wb");
compressor_init(&comp);
while((r = fread(buffer, 1, 512, fd))) {
compressor_compress(&comp, buffer, r);
}
compressor_finalise(&comp);
fclose(fd_out);
fclose(fd);
Jetzt ist compressor eine Klasse, comp ein Objekt und der Code objektorientiert.
Dein Ansatz kann große Datenmengen schlicht nicht erschlagen -- wenn meine Datei jetzt ein Blu-Ray-Image ist, hast du ein großes Problem. Und dabei haben wir noch nicht mal davon gesprochen, was passieren soll, wenn der Kompressionsalgorithmus mal nicht zur Compilezeit feststeht.