我有一个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编译器。
答案 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 */
希望有所帮助。