C .pc文件警告

时间:2010-03-09 12:20:23

标签: c gcc

我有一个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 个答案:

答案 0 :(得分:1)

您可以通过指定5个违规声明的类型来删除警告。实际上,必须声明它们根本没有类型,在C中默认为int(但会生成警告)。

编辑:我在Google上发现了此声明。

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

该函数没有返回类型。它应该有一个。写下如下。

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

或者您可以在编译器命令行中手动声明忽略这些警告。它们将不再显示。

答案 1 :(得分:1)

我使用Pro * C已经有一段时间了,但我认为你可以在proc命令行中添加一个命令行选项

code=ANSI_C

将为名为。

的函数提供原型

答案 2 :(得分:0)

将来,请提供代码段以及警告,以便我们可以使用某些上下文。否则我们只能猜出真正的问题是什么。

我假设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 */

希望有所帮助。