我有一个警告和错误,值无效;警告:函数返回void,错误:void值未忽略

时间:2019-03-13 03:32:18

标签: c void

我的代码收到了这些警告,我不确定如何解决它们。 警告:函数返回值时返回“ void” [默认启用] 错误:无效值未被忽略

这是我的一些代码:

void print_month(int month, int year, int first_day, int year_view){
  int width, row, col;
  int days = days_per_month[month - 1];

  if (month == 2){
    days += leap_year_correction(year);
  }

  --month;

  if (year_view){
    row = (month /3) * 9 +2;
    col = (month % 3) * 22;
  } else{
    row = col = 0;
  }
  if (year_view){
    width = 10 + strlen(month_names[month])/2;
    sprintf(grid[row] + col, "%*s", width, month_names[month]);
  } else{
    width = 8 + strlen(month_names[month])/2;
    sprintf(grid[row] + col, "%*s %d", width, month_names[month], year);
  }
  sprintf(grid[row + 1] + col, "Su Mo Tu We Th Fr Sa");
  sprintf(grid[row + 2] + col, "%*s", 3 * first_day, "");
  row += 2;
  for (int i=1; i <= days; i++){
    sprintf(grid[row] + col + 3 * first_day, "%2d", i);
    if ((first_day = (first_day + 1) % 7) == 0){
      row += 1;
    }
  }
  return first_day;
}

下一部分是主程序中的代码

first_day = find_first_day(month < 0 ? 1 : month, year);
  if (month < 0){
    sprintf(grid[0] + 30, "%d", year);
    for (int i=1; i <= 12; i++){
      first_day = print_month(i, year, first_day, 1);
    }
  } else{
    print_month(month, year, first_day, 0);
  }
  print_grid(month < 0);
  return 0;

2 个答案:

答案 0 :(得分:2)

void print_month(...)表示此函数将不返回任何值。但是,您在结尾处返回了一个值-return first_day;

void print_month(...)更改为int print_month(...),使其返回整数值。

答案 1 :(得分:1)

print_month函数的返回类型为void,这意味着它不返回任何值。因此,当您尝试从函数返回值时会收到警告,而在尝试使用函数的返回值时会得到警告。

您希望此函数返回类型为int的值,因此将返回类型更改为:

int print_month(int month, int year, int first_day, int year_view){