C .pc файл предупреждение - PullRequest
1 голос
/ 09 марта 2010

У меня есть файл RefTables.pc.

Когда я выполняю команду make, я получаю это предупреждение:

RefTables.c:109: warning: type defaults to `int' in declaration of `sqlcxt'
RefTables.c:111: warning: type defaults to `int' in declaration of `sqlcx2t'
RefTables.c:113: warning: type defaults to `int' in declaration of `sqlbuft'
RefTables.c:114: warning: type defaults to `int' in declaration of `sqlgs2t'
RefTables.c:115: warning: type defaults to `int' in declaration of `sqlorat'

Как мне это убрать?

Я использую компилятор linux & gcc.

Ответы [ 3 ]

2 голосов
/ 09 марта 2010

Прошло много времени с тех пор, как я использовал Pro * C, но я думаю, что вы можете добавить параметр командной строки в командную строку proc

code=ANSI_C

, который даст прототипы для названных функций.

1 голос
/ 09 марта 2010

Вы можете удалить предупреждение, указав тип 5 оскорбительных объявлений. На самом деле они должны быть объявлены без какого-либо типа, по умолчанию это int в C (но генерирует предупреждение).

Редактировать: я нашел в Google эту декларацию.

extern sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/);

Функция не имеет типа возврата. У него должен быть один. Запишите это следующим образом.

extern int sqlcxt (/*_ void **, unsigned int *, struct sqlexd *, struct sqlcxp * _*/);

Или вы можете указать это вручную в командной строке компилятора, чтобы игнорировать эти предупреждения. Они больше не будут отображаться.

0 голосов
/ 09 марта 2010

В будущем предоставьте фрагмент кода вместе с предупреждениями, чтобы у нас был некоторый контекст для работы. В противном случае мы можем только догадываться, в чем заключается настоящая проблема.

Я предполагаю, что sqlcxt, sqlcx2t и т. Д. Являются функциями. Не видя исходного кода, кажется, что у вас нет объявления для этих функций в области видимости перед их использованием.

Вот краткий пример того, что я имею в виду:

int main(void)
{
  foo();
  return 0;
}

void foo(void)
{
  // do something interesting
}

Когда компилятор видит вызов foo в main, он не имеет объявления в области видимости, поэтому он предполагает, что foo возвращает int, а не void, и выдаст предупреждение, аналогичное тому, что вы получил выше.

Если ваши функции определены в том же файле, в котором они вызываются, есть два пути решения этой проблемы. Мой предпочтительный способ - определить функцию перед ее использованием:

void foo(void)
{
  // do something interesting
}

int main(void)
{
  foo();
  return 0;
}

Другим способом является объявление функции в области видимости перед ее вызовом:

void foo(void);

int main(void)
{
  foo();
  return 0;
}

void foo(void)
{
  // do something interesting
}

Похоже, что эти функции являются частью API базы данных; если так, то должен быть файл заголовка, который содержит объявления для этих функций, и этот заголовок должен быть включен в ваш исходный файл:

/** foo.c */
#include "foo.h"

void foo(void) 
{
  // do something interesting
}
/** end foo.c */

/** foo.h */
#ifndef FOO_H
#define FOO_H

void foo(void);

#endif
/** end foo.h */

/** main.c */
#include "foo.h"

int main(void)
{
  foo();
  return 0;
}
/** end main.c */

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...