这些警告是什么意思?C

5
 final code2.c:9:1: warning: implicit declaration of function 'choice' is invalid in C99 [-Wimplicit-function-declaration]
choice();
^
final code2.c:12:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
choice()
^~~~~~
final code2.c:23:1: warning: implicit declaration of function 'wrong' is invalid in C99 [-     Wimplicit-function-declaration]
wrong();
^
final code2.c:25:1: warning: implicit declaration of function 'formula1' is invalid in C99 [-Wimplicit-function-declaration]
formula1();
^
final code2.c:27:1: warning: implicit declaration of function 'formula2' is invalid in C99 [-Wimplicit-function-declaration]
formula2();
^
final code2.c:29:1: warning: implicit declaration of function 'formula3' is invalid in C99 [-Wimplicit-function-declaration]
formula3();
^
final code2.c:30:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
final code2.c:32:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
wrong()
^~~~~
final code2.c:35:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
final code2.c:37:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
formula1()
^~~~~~~~
final code2.c:47:1: warning: implicit declaration of function 'question' is invalid in C99 [-Wimplicit-function-declaration]
question();
^
final code2.c:50:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
final code2.c:52:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
formula2()
^~~~~~~~
 final code2.c:63:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
final code2.c:65:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
formula3()
^~~~~~~~
final code2.c:85:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
final code2.c:87:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
question()
^~~~~~~~
final code2.c:99:1: warning: control reaches end of non-void function [-Wreturn-type]
 } 

我一直在尝试摆脱代码中的这些警告。每个警告代表什么意思,最好的消除方法是什么?


1
你能发布导致警告的代码吗? - Mgetz
1
请问您能提供一下代码吗?错误信息比较笼统。 - Lorenz
我认为这些警告来自于这个问题的来源:http://stackoverflow.com/q/17346374/694576 - alk
1
它们的意思是你没有为函数声明返回类型,并且在编译器为这些函数添加默认的int返回类型后,你没有使用return语句。将它们全部声明为void,警告就会消失。 - Crowman
http://www.google.com/search?q=gcc+implicit+declaration - Karoly Horvath
5个回答

6

他们的意思是你没有为你的函数声明返回类型,并且在编译器为这些函数添加默认的int返回类型后,你没有使用return语句。将它们全部声明为void,警告就会消失。

编辑:还要在使用之前声明你的函数,可以在头文件中声明,也可以在调用它们的代码上方声明。


1
函数在声明之前被使用。 - Oktalist
@Oktalist:好的,修改了。 - Crowman

3

看起来你有一个名为choice()的函数,但没有给出返回类型。如果你想要它是void类型,请声明为:

void choice();

3
您有一个函数原型,看起来像这样:

choice();

在 C89 中,这是可以的,它会隐式地变成:

int choice();

在C99中,需要显式地添加返回类型。同时看起来您想要的是void类型,所以您需要:
void choice();

1

你在使用函数之前没有声明它们。C语言要求在使用函数前必须先声明。通常情况下,你可以将函数声明放在头文件中。

bad-example.c:

void myFunc() {
   // This causes an implicit declaration; myTest() has not yet been defined.
   myTest(); 
}

void myTest() {
}

good-example.c:

void myFunc();
void myTest();

void myFunc() {
   myTest(); 
}

void myTest() {
}

0

你在声明函数之前使用了它们。你可能只是忘记包含一些头文件。

错误信息的解释: Wimplicit-function-declaration(仅适用于C和Objective-C) 每当在声明之前使用函数时,都会发出警告。在C99模式(-std=c99或-std=gnu99)下,默认情况下启用此警告,并通过-pedantic-errors将其转换为错误。此警告也通过-Wall启用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接