typedef struct database
{
char *host;
char *user;
char *pass;
char *name;
MYSQL *mysql;
MYSQL_RES *result;
MYSQL_ROW row;
}database_t;
extern database_t db;
........................
MYSQL* mysql_connection_setup(database_t db)
{
//MYSQL *connect = mysql_init(NULL);
db.mysql = mysql_init(NULL);
printf("HOST %s\n", db.host);
if(!mysql_real_connect(db.mysql, db.host, db.user, db.pass, db.name, 0, 0, 0))
{
printf("Conection error : %s\n", mysql_error(db.mysql));
exit(1);
}
return db.mysql;
}
MYSQL_RES* mysql_perform_query(MYSQL *connect, char *command)
{
if(mysql_query(connect, command))
{
printf("MySQL query error : %s\n", mysql_error(connect));
exit(1);
}
return mysql_use_result(connect);
}
......................................
如果我尝试在中使用 mysql 函数
int some_func()
{
database_t *db = malloc(sizeof(database_t));
db->mysql = mysql_connection_setup();
return 0;
}
编译后会看到一些警告。
警告:函数“mysql_connection_setup”的隐式声明 [-Wimplicit-function-declaration] db->mysql = mysql_connection_setup(); 警告:赋值使指针来自整数而不进行强制转换 [-Wint-conversion] db->mysql = mysql_connection_setup();
我用它做什么?
最佳答案
警告说编译器在您第一次使用 mysql_connection_setup()
时没有看到任何声明。因此,编译器使用 int
返回类型隐式声明了一个与您的实际函数冲突的类型。 (请注意,自 C99 以来,“隐式 int”规则已从 C 标准中删除)。
因此,在源文件的顶部提供一个声明:
MYSQL* mysql_connection_setup(database_t db);
或者在头文件中将其声明为 extern
,如果您使用 mysql_connection_setup()
在其他源文件中,则将该头文件包含在您的源文件中.
con_setup.h:
#ifndef CON_SETUP_H
#define CON_SETUP_H
extern MYSQL* mysql_connection_setup(database_t db);
#endif
并在您的 C 文件中包含 con_setup.h
。
关于mysql - 函数C mysql的隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40463615/