2017-01-24 9 views
3

Я не могу скомпилировать код, когда я включаю my_global.h.Компиляция кода c с my_global.h, основная функция в порядке, но ничего больше

Это не должно быть основной функцией, так как данные до этого «собраны» кодом в другом файле c, вместе с этим будет программой (с использованием внешних переменных, которые еще не находятся в коде).

Проблема заключается в том, что я не могу скомпилировать код, когда функция отличается от «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

Видимо, есть макрос с именем 'test'. И функция под названием 'test'. Угадай, что? Вы путаете компилятор. И да, сообщение об ошибке * чрезвычайно * ясно. –

+0

Да, переименуйте свою функцию в 'my_test()', что также было бы смешно! Потому что у всех вещей 'MySQL' есть' my', и теперь вам понадобится один, чтобы включить 'my_'. –

+0

@IharobAlAsimi Может ли всегда работать с 'real_my_test', как это принято в API MySQL. – tadman

ответ

0

Вы определили, что ваша функция имеет то же имя, что и макрос, определенный в mysql/my_global.h. В результате имя функции получает макроподстановку.

Макрос ожидает аргумент, но объявление функции выглядит как макрокоманда, подобная функции, у которой нет аргументов, поэтому вы получаете сообщение об ошибке.

Определите свою функцию, чтобы иметь другое имя, кроме test, и все должно быть хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^