I wonder which of the two snippets is better? In the second one, I extracted two short subroutines.
- On the one hand, extraction clearly separate the two tasks
- On the other hand, it induces 6 more lines for function prototype
The code is about a simple images database called pictdb_file
. The first function contributes to the creation of a new database.
/** this is a helper method for [...] blahblah */
static error_enum
db_create_delegate(const char* db_filename, pictdb_file* new_db_file)
{
strncpy(new_db_file->header.db_name, CAT_TXT, MAX_DB_NAME);
new_db_file->header.db_name[MAX_DB_NAME] = '\0';
new_db_file->header.num_files = 0;
new_db_file->header.db_version = 0;
size_t n1;
n1 = fwrite(&new_db_file->header, sizeof(pictdb_header), 1, new_db_file->fpdb);
if (n1 != 1) {
return ERR_IO;
}
size_t n2;
n2 = fwrite(new_db_file->metadata, sizeof(pict_metadata), new_db_file->header.max_files, new_db_file->fpdb);
if (n2 != new_db_file->header.max_files) {
return ERR_IO;
}
printf("%lu item(s) written\n", n1 + n2);
return 0;
}
Compared to:
/** helper method [...] blahblah */
static error_enum
db_create_helper(const char* db_filename, pictdb_file* db_file)
{
finish_initialization(db_file);
return write_to_file(db_file);
}
static void
finish_initialization(pictdb_file* new_db_file)
{
strncpy(new_db_file->header.db_name, CAT_TXT, MAX_DB_NAME);
new_db_file->header.db_name[MAX_DB_NAME] = '\0';
new_db_file->header.num_files = 0;
new_db_file->header.db_version = 0;
}
static error_enum
write_to_file(pictdb_file* db_file)
{
size_t n1;
n1 = fwrite(&db_file->header, sizeof(pictdb_header), 1, db_file->fpdb);
if (n1 != 1) {
return ERR_IO;
}
size_t n2;
n2 = fwrite(db_file->metadata, sizeof(pict_metadata), db_file->header.max_files, db_file->fpdb);
if (n2 != db_file->header.max_files) {
return ERR_IO;
}
printf("%lu item(s) written\n", n1 + n2);
return 0;
}