Jag förstår inte riktigt din tanke med att ha en massa getters och setters. Allt det gör är att skapa mer boilerplatekod. C är som sagt inte Java.
Om du ogillar en massa statiska variabler som förorenar ditt namespace så blir det ju inte bättre av att du istället förorenar ditt namespace med en massa getters/setters.
Mitt förslag är att du skapar en struct som håller ditt state. T.ex. något i stil med:
struct mysqldb {
char* host;
char* user;
char* pass;
char* dbname;
uint16_t port; /* en TCP port är en 16 bitars int... */
char* socket; /* ??? ser ut som fel typ */
unsigned int flag;
}
Sedan skickar du med detta till saker som mysqldb_connect() och mysql_disconnect(). Skapa datastrukturen finns det olika sätt att göra på. T.ex.:
/* denna funktion lägger du rimligen i typ mysqldb.c */
struct mysqldb *mysqldb_new(void) {
struct mysqldb *db = calloc(1, sizeof (*db)); /* calloc, typ som malloc, men fyller med nollor */
if (db != NULL) {
db->port = 3306; /* vi förställer porten till 3306, men låter anroparen ändra den vid behov! */
}
return db;
}
int mysqldb_connect(struct mysqldb *db) {
/* magi */
return 0;
}
/* och här är vi i typ main.c */
int main(int argc, char *argv[]) {
struct mysqldb *db = mysqldb_new();
if (db == NULL) {
/* error */
exit(1);
}
int ret;
db->host = "mysql.1177.se";
db->user = "internetsladd";
db->pass = "kommandorörelse";
db->namn = "samtalsinspelningar";
ret = mysqldb_connect(db);
if (ret != 0) {
/* error */
exit(2);
}
/* ... */
return 0;
}
Du kan så klart också lägga upp en massa argument till mysqldb_new() om du vill, men själv känner jag att det blir mer läsbart på det här sättet än att ha en lång argumentlista där man måste slå upp vad argumenten betyder.