簡體   English   中英

函數C mysql的隱式聲明

[英]implicit declaration of function C mysql

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);

或者,如果在其他源文件中使用mysql_connection_setup()則在頭文件中將其聲明為extern並將其包含在源文件中。

con_setup.h:

#ifndef CON_SETUP_H
#define CON_SETUP_H

extern MYSQL* mysql_connection_setup(database_t db);

#endif

並在C文件中包含con_setup.h

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM