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:
script.c
. test.h
(BTW – la convención de nomenclatura común será script.h
). 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
.