¿Cómo mover las credenciales de MySQL a un include.h?

El siguiente código funciona bien. Sin embargo …
Quiero mover las credenciales de MySQL a test.h

script.c

#include  #include  #include  #include  #include  #include "test.h" int main() { while (FCGI_Accept() >= 0) { char query[300]; MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "localhost"; char *user = "root"; char *password = ""; char *database = "a"; conn = mysql_init(NULL); if (mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { sprintf(query, "select * from table limit 1"); mysql_query(conn, query); res = mysql_use_result(conn); row = mysql_fetch_row(res); } printf("Content-type: text/html;\r\n"); printf("\r\n"); printf("%s", row[1]); FCGI_Finish(); } return 0; } 

OK, copiemos y movamos todos estos para probar.
prueba.h

 char query[300]; MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "localhost"; char *user = "root"; char *password = ""; char *database = "a"; conn = mysql_init(NULL); 

bash de comstackr script.c

 In file included from test.c:7: test.h:11: warning: data definition has no type or storage class test.h:11: error: conflicting types for 'conn' test.h:3: note: previous declaration of 'conn' was here test.h:11: warning: initialization makes integer from pointer without a cast test.h:11: error: initializer element is not constant 

En realidad hay más errores. Solo pegué las primeras líneas.

Use #define en el archivo de encabezado.

 // test.h #define SERVER "localhost" #define PASSWORD "" 

Mantener el rest en el archivo de código fuente.

 // script.c char *server = SERVER; char *user = USER; 

Si desea usar funciones de script.c en otros archivos fuente de C, su mejor opción es:

  • Defina estas funciones en script.c .
  • Declare estas funciones en test.h (BTW – la convención de nomenclatura común será script.h ).
  • Luego puede incluir test.h desde cualquier otro archivo .c (que se script.c junto con script.c ) y usar estas funciones que están declaradas allí.

Con respecto a las variables: puede #define en el archivo .h , o dejarlas en el archivo .c y envolverlas con funciones de obtención, y luego declarar estas funciones en la misma que escribí anteriormente para las funciones. Por ejemplo:

En el script.c tendrás:

 char *server = "localhost"; ... const char *get_server(void) { return server; } 

Y en el archivo .h declararás:

 const char *get_server(void); 

A veces es necesario poner las definiciones de funciones en los archivos .h , pero por lo general debe tener una buena razón para ello (como las funciones en línea, por ejemplo). En su caso, no lo necesita, guárdelo en el archivo fuente .c .