尽管具有返回值,控制到达非空的结束

时间:2017-02-13 21:58:08

标签: c

我在编译期间收到错误:

  

src / smtp.c:208:1:警告:控制到达非空函数的末尾[-Wreturn-type]

这是相关代码

int smtp_test_method(int socket)
{
    int smtp_code;

    if ((smtp_code = smtp_speak(socket, "VRFY root\r\n")) == 501 ||
                                                smtp_code == 250 ||
                                                smtp_code == 252)
        return 0;
    else if ((smtp_code = smtp_speak(socket, 
                            "MAIL FROM:test@test.com\r\n")) == 250) {
        if ((smtp_code = smtp_speak(socket, "RCPT TO:root\r\n")) == 250 || 
                                                          smtp_code == 550)
            return 1;
    } else 
    return smtp_code;
}

其中smtp_speak是一个将/ EHLO连接到服务器然后发送消息的函数,将响应代码作为int返回。为什么我会收到此错误?

2 个答案:

答案 0 :(得分:3)

在第二个if之后需要一个return语句:

if ((smtp_code = smtp_speak(socket, "RCPT TO:root\r\n")) == 250 || smtp_code == 550)
   return 1;
**else
   return something;**

答案 1 :(得分:0)

我在每个{}周围添加return something;并自动重新格式化。

结果很清楚。

1)使用自动格式化 2)在{}

周围使用if/else
int smtp_test_method(int socket) {
  int smtp_code;

  if ((smtp_code = smtp_speak(socket, "VRFY root\r\n")) == 501
      || smtp_code == 250 || smtp_code == 252) {
    0;
  } else if ((smtp_code = smtp_speak(socket, "MAIL FROM:test@test.com\r\n"))
      == 250) {
    if ((smtp_code = smtp_speak(socket, "RCPT TO:root\r\n")) == 250
        || smtp_code == 550) {
      return 1;
    }
  } else {
    return smtp_code;
  }
  /* Missing return */
}