使用my_global.h编译c代码,main函数没问题,但没有别的

时间:2017-01-24 23:13:25

标签: mysql c main void

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

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

我的问题是当函数不是“main”时我无法编译代码。我在下面做了一个非常简单的例子,所以如果我将“void test(){”替换为“void main(){”在下面的例子中编译就可以了。保持“测试”但删除#include my_global.h也没问题。但是在最终的代码中我当然需要my_global.h,所以我无法删除它。因此,不是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() {
      ^

我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您已将函数定义为与mysql / my_global.h中定义的宏具有相同的名称。结果,函数的名称在其上完成宏替换。

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

将你的函数定义为除test之外的某个名称,你应该没问题。