我的系统上有一个 minGW GCC 编译器。我正在用 C 编写代码。由于某种原因,一些原本正常的代码无法正确编译。
#include <stdio.h>
#include <math.h>
int main() {
sayHi();
return 0;
}
void sayHi(){
printf("Hello bro");
}
cmd中的输出为:
6:2: warning: implicit declaration of function 'sayHi' [-Wimplicit-function-declaration]
10:6: warning: conflicting types for 'sayHi' void sayHi(){
。 :6:2: note: previous implicit declaration of 'sayHi' was here sayHi();
编译器在使用 sayHi() 函数之前需要了解它。有两种选择:
将 sayHi() 函数定义移至主函数上方。
在主函数之前声明 sayHi() 函数,例如:
无效 sayHi();
当编译器看到
sayHi();
时,它还没有看到 void sayHi()
,因此它认为 sayHi()
隐式声明为 int sayHi()
。
然后它看到
void sayHi()
,但由于 sayHi()
现在(隐式)声明为 int sayHi()
,返回类型现在发生冲突。
根据经验,您应该将包含“隐式”一词的警告视为错误。
你想要这个:
void sayHi(); // declare explicitely before using it
int main() {
sayHi();
return 0;
}
void sayHi(){
printf("Hello bro");
}
或者这个:
void sayHi() { // put the whole function before using it
printf("Hello bro"); // which declares it as void
}
int main() {
sayHi();
return 0;
}
更好:
void sayHi()
应该是 void sayHi(void)
,它声明 sayHi
函数根本不带参数。