首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数C mysql的隐式声明

函数C mysql的隐式声明
EN

Stack Overflow用户
提问于 2016-11-07 11:03:46
回答 1查看 459关注 0票数 0
代码语言:javascript
复制
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;

..

代码语言:javascript
复制
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函数

代码语言:javascript
复制
int some_func()
{
  database_t *db = malloc(sizeof(database_t));
  db->mysql = mysql_connection_setup();
  return 0;
}

编译il后,请查看一些警告。

警告:函数'mysql_connection_setup‘的隐式声明-W隐函数声明db->mysql = mysql_connection_setup();警告:赋值使指针从整数转换而不强制转换db->mysql = mysql_connection_setup();

我是怎么做的?

EN

回答 1

Stack Overflow用户

发布于 2016-11-07 11:11:56

警告说,当您第一次使用mysql_connection_setup()时,编译器还没有看到它的任何声明。因此,编译器使用int返回类型声明一个与实际函数冲突的类型。(请注意,自C99以来,“隐式int”规则已从C标准中删除)。

因此,在源文件顶部提供一个声明:

代码语言:javascript
复制
MYSQL* mysql_connection_setup(database_t db);

或者在头文件中声明为extern,如果使用mysql_connection_setup()在其他源文件中,则将该头文件包含在源文件中。

con_setup.h:

代码语言:javascript
复制
#ifndef CON_SETUP_H
#define CON_SETUP_H

extern MYSQL* mysql_connection_setup(database_t db);

#endif

并在C文件中包括con_setup.h

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40463615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档