C — 警告 : control reaches end of non-void function [-Wreturn-type]

标签 c

我是 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; 或任何合理的值。

ma​​in 函数比较特殊。不返回值是有效的 C。但即使跳过返回是合法的,编译器也可以给你一条诊断信息(也就是警告)。

您可以尝试使用某种编译指示或命令行参数来说服您的编译器。或者你放弃并返回一个值,即使你认为没有必要。这将抑制此警告。 (一个声明并没有那么昂贵。)

关于C — 警告 : control reaches end of non-void function [-Wreturn-type],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29272010/

相关文章:

c - 使用C标准数学库精确计算标准正态分布的CDF

c - 将 O2 优化的 for 循环从汇编翻译成 C

c++ - 如何制作在线C/C++编译器?

c - SDL 相对位置

c - 从 64 位机器中的 C 函数访问返回地址时出现段错误

c - 如何组织C多文件项目?

c - 为什么#pragma pack 也会影响结构自身的对齐方式?

c - 如何并行化下面的for循环

c - 如何将数组中的第一个元素分配给变量?

c - Linux 内核如何设置 PCI BAR 以便不存在地址冲突?