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

我有这些警告,我一直试图在我的代码中摆脱这些警告。每个警告的含义是什么以及摆脱它们的最佳方法是什么?

4

5 回答 5

6

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

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

于 2013-06-27T15:31:24.107 回答
3

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

void choice();
于 2013-06-27T15:32:05.500 回答
3

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

choice();

在 C89 中,这很好,它会隐式变为:

int choice();

在 C99 中,您需要显式添加返回类型。看起来你也打算让它无效,所以你会想要:

void choice();
于 2013-06-27T15:32:40.767 回答
1

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

坏例子.c:

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

void myTest() {
}

好例子.c:

void myFunc();
void myTest();

void myFunc() {
   myTest(); 
}

void myTest() {
}
于 2013-06-27T15:32:14.410 回答
0

您在声明它们之前使用函数。您可能只是缺少一些标题。

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

于 2013-06-27T15:34:14.057 回答