在C ++项目中使用C代码

时间:2010-03-07 13:54:49

标签: c++ c

我想在我的C ++项目中使用这个C代码: mysql.c:

/* Simple C program that connects to MySQL Database server*/
#include <mysql.h>
#include <stdio.h>
#include <string.h>

main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;

   char *server = "localhost";
   char *user = "root";
   char *password = "rebourne"; /* set me first */
   char *database = "mydb";

   conn = mysql_init(NULL);

   /* Connect to database */
   if (!mysql_real_connect(conn, server,
         user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   /* send SQL query */
   if (mysql_query(conn, "show tables")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   res = mysql_use_result(conn);

   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);

   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);
}

用gcc编译:

gcc -o output-file $(mysql_config --cflags) mysql.c $(mysql_config --libs)

但不是用g ++ ..

你会做什么?

编辑: 错误是:       出口(1);未在此范围内声明

5 个答案:

答案 0 :(得分:4)

首先要做的事情:如果你向我们展示了编译错误,它可能会更有帮助。

话虽这么说,我最初的本能是建议:

extern "C"
{
    #include <mysql.h>
    #include <stdio.h>
    #include <string.h>
}

现在这是一个猜测,但如果没有实际的错误信息,那么这是你最好的。

哦,也许重命名文件以.cpp,.c ++或.C(大写)结尾会有所帮助。

答案 1 :(得分:1)

使用:

extern "C"
{
    YOUR CODE HERE
}

答案 2 :(得分:1)

好的,既然给出了答案,那么可以学习一些课程。

首先,在报告无法编译的内容时始终提供错误。这些消息包含有价值的信息也不要解释他们。将它们剪切并粘贴到自己的代码块中。

其次,只要您使用某个功能,检查文档。我从未见过没有告诉你手册页顶部或等效文件所需的头文件的C文档。它与解释函数的作用一样,也是文档的一部分。编程C和C ++时需要大量的头文件。记录函数所需的标题是一个非常常见的文档习惯用语。

答案 3 :(得分:0)

#include <stdlib.h>

虽然我怀疑它确实说过“退出(1);”。请在下次显示确切的消息。

答案 4 :(得分:0)

现在,我没有在很长一段时间内编程C(并且从未处于非常高的水平)但是我觉得奇怪的是你想要在现有的代码库中包含main()函数。难道真的是编译器或链接器在抱怨吗?当你说GCC成功编译代码时,你只是编译那个源文件,还是将它包含在更大的代码库中?

如果我的猜测是正确的,那么将函数重命名为main之外的其他内容是有意义的,例如connect_to_database()。