我是 C 编程的新手。 谁能帮我解释我遇到的错误。 我不明白为什么会收到此错误。
test4.c: In function 'main':
test4.c:65:3: warning: control reaches end of non-void function [-Wreturn-type]
下面是我的代码:
#include <webots/robot.h>
#include <webots/distance_sensor.h>
#include <webots/differential_wheels.h>
#define TIME_STEP 64
int main()
{
wb_robot_init();
int i;
WbDeviceTag ps[8];
char ps_names[8][4] = {"ps0","ps1","ps2","ps3",
"ps4","ps5","ps6","ps7"};
for(i=0;i<8;i++)
{
ps[i]=wb_robot_get_device(ps_names[i]);
wb_distance_sensor_enable(ps[i], TIME_STEP);
}
while(1)
{
int delay=wb_robot_step(TIME_STEP);
if(delay==-1)
break;
double ps_values[8];
for(i=0;i<8;i++)
ps_values[i]=wb_distance_sensor_get_value(ps[i]);
//printf("ps0=%d\t", ps_values[0]);
double left_speed=500;
double right_speed=500;
for(;;)
{
if(ps_values[0]>80 || ps_values[1]>80 || ps_values[2]>80)
{
left_speed =-500;
right_speed =500;
}
else if(ps_values[5]>80 || ps_values[7]>80 || ps_values[2]>80)
{
left_speed =500;
right_speed =-500;
}
else
{
left_speed =500;
right_speed =500;
}
}
wb_differential_wheels_set_speed(left_speed, right_speed);
wb_robot_cleanup();
return 0;
}
}
最佳答案
您有一个不返回值的非空函数。您的编译器已分析到可以到达函数的结尾。
if(delay==-1)
break;
因此,您遗漏返回声明是可疑的或错误的。
在函数末尾添加 return 0;
或任何合理的值。
main 函数比较特殊。不返回值是有效的 C
。但即使跳过返回是合法的,编译器也可以给你一条诊断信息(也就是警告)。
您可以尝试使用某种编译指示或命令行参数来说服您的编译器。或者你放弃并返回一个值,即使你认为没有必要。这将抑制此警告。 (一个声明并没有那么昂贵。)
关于C — 警告 : control reaches end of non-void function [-Wreturn-type],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29272010/