mysql - 用my_global.h编译c代码,主要功能没问题,但没有别的

标签 mysql c program-entry-point void

<分区>

当我包含 my_global.h 时,我无法编译代码。

这不应该是一个主要功能,因为之前的数据是由另一个 c 文件中的代码“收集”的,与这个一起将成为程序(使用外部变量,这还不在代码中)。

我的问题是当函数不是“main”时我无法编译代码。我在下面做了一个非常简单的示例,所以如果我在下面的示例中将“void test() {”替换为“void main() {”,编译就可以了。保留“test”但删除#include my_global.h 也可以。但是在最终代码中我当然需要 my_global.h,所以我不能删除它。所以 not main 和 my_global.h 的组合给了我这个问题。

#include <my_global.h>
#include <mysql.h>
#include <stdlib.h>
#include <stdio.h>
#include "extvar.h"

void test() {
printf("Testing testing\n");
}

我正在使用 $ gcc -c testa.c -o testa.o 'mysql_config --cflags --libs' 进行编译。

错误信息:

In file included from testa.c:1:0:
/usr/include/mysql/my_global.h:478:21: error: expected identifier or ‘(’ before ‘)’ token
 #define test(a)  ((a) ? 1 : 0)
                     ^
testa.c:7:6: note: in expansion of macro ‘test’
 void test() {
      ^

非常感谢您的帮助。

最佳答案

您已将函数定义为与 mysql/my_global.h 中定义的宏同名。结果,函数的名称对其进行了宏替换。

宏需要一个参数,但你的函数声明看起来像一个没有参数的类函数宏调用,所以你会得到一个错误。

将您的函数定义为具有 test 以外的名称,您应该没问题。

关于mysql - 用my_global.h编译c代码,主要功能没问题,但没有别的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840672/

相关文章:

mysql - 使用 MySQL 匹配子表中的多行

PHP if 语句比较总是返回 true

php - 使用删除查询时 PHP 代码中的结果始终为 TRUE

php - While 循环和 mysql_fetch_assoc 在一个查询上?

c - 在 SDL2 中正确使用按键?

go - 为什么我不能在 golang 中将 main 添加到我的库中?

没有 main 方法的 C# 类

c++ - 在 Windows 上编译 FastBoot(用于 android 用户空间刷写)

c - 从不兼容的指针类型和取消引用指针到不完整类型的分配

java - 在 Java 8 之前将方法作为参数传递