我是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;
}
}
答案 0 :(得分:1)
您有一个未返回值的非void函数。您的编译器已经分析了可以到达函数的结尾。
if(delay==-1)
break;
因此,您对遗漏声明的遗漏是可疑或错误的。
在函数末尾添加return 0;
或任何合理的值。
主要功能很特别。有效C
无效。但即使跳过返回是合法的,编译器也可以给你一个诊断消息(a.k.a。警告)。
您可以尝试使用某种编译指示或命令行参数来说服您的编译器。或者你放弃并返回一个值,即使你认为没必要。这将抑制此警告。 (一种说法并不昂贵。)
答案 1 :(得分:1)
在我看来,return
循环结束时的while
语句被错误地放在那里。否则,该函数将在循环内执行一轮代码后返回。那么循环的重点是什么?
而不是
while(1)
{
int delay=wb_robot_step(TIME_STEP);
if(delay==-1)
break;
....
....
wb_differential_wheels_set_speed(left_speed, right_speed);
wb_robot_cleanup();
return 0;
}
也许您打算使用:
while(1)
{
int delay=wb_robot_step(TIME_STEP);
if(delay==-1)
break;
....
....
wb_differential_wheels_set_speed(left_speed, right_speed);
wb_robot_cleanup();
}
// The return statement outside the while loop.
return 0;
这也将修复编译器警告。