这些警告对C意味着什么?

时间:2013-06-27 15:27:27

标签: c

 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]
 } 

我有这些警告,我一直在试图摆脱我的代码。 每个警告意味着什么,最好的方法是摆脱它们?

5 个答案:

答案 0 :(得分:6)

它们意味着您没有为函数声明返回类型,并且在编译器为这些函数添加了默认return返回类型后,您没有使用int语句。将它们全部声明为void,警告将消失。

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

答案 1 :(得分:3)

你有一个如下所示的函数原型:

choice();

在C89中,这很好,它会隐含地变成:

int choice();

在C99中,您需要显式添加返回类型。看起来你似乎也无效,所以你需要:

void choice();

答案 2 :(得分:2)

看起来你有一个你没有给出返回类型的函数选择()。 如果您打算将其声明为无效声明为:

void choice();

答案 3 :(得分:1)

在使用之前,您不会声明您的功能。 C要求您在使用它们之前声明函数。通常,您将声明放在头文件中。

坏example.c:

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

void myTest() {
}

好example.c:

void myFunc();
void myTest();

void myFunc() {
   myTest(); 
}

void myTest() {
}

答案 4 :(得分:0)

在声明之前使用的是函数。你可能只是遗漏了一些标题。

错误消息说明: Wimplicit-function-declaration(仅限C和Objective-C) 在声明之前使用函数时发出警告。在C99模式下(-std = c99或-std = gnu99),默认情况下启用此警告,并通过-pedantic-errors将其设置为错误。 -Wall也启用了此警告。