Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

warning: control reaches end of non-void function [-Wreturn-type]

Tags:

I am having a slight is regarding functions. I believe it is likely because I am not using them. My code is as follows:

/*date difference calculator*/  #include <stdio.h>  int main() {   int Date1 = 0, Date2 = 0, Dif, F, L, D1, D2, M1, M2, Y1, Y2;   int x[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};   int y[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};   char A1, A2, B1, B2;  /*input first date*/   fprintf (stderr , "Enter first date,in the form <day>/<month>/<year>  or <day>-<month>-<year>.\nWhere <day>,<month> and <year> are integers:\n");  (scanf("%i%c%i%c%i", &D1, &A1, &M1, &B1, &Y1));  /*check first date*/   if (!(Y1 % 4)) x[2]=29;  while ((Y1 < 1 || (Y1 > 9999)) || (M1 < 1 || M1 > 12) || (D1 < 1 || D1 > x[M1]) || (A1 != B1) || ((A1 != '/') && (A1 != '-')))       {        fprintf (stderr, "Incorrect format, re-enter date:\n");        scanf("%i%c%i%c%i", &D1, &A1, &M1, &B1, &Y1);        if (!(Y1 % 4)) x[2]=29;      }  /*print first date*/   fprintf (stderr, "First date = %i%c%i%c%i\n", D1 , A1 , M1 , B1 , Y1);  /*input second date*/   fprintf (stderr , "Enter second date,in the form <day>/<month>/<year> or <day>-<month>-<year>.\nWhere <day>,<month> and <year> are integers:\n");  (scanf("%i%c%i%c%i", &D2, &A2, &M2, &B2, &Y2));  /*check second date*/   if (!(Y2 % 4)) y[2]=29;  while ((Y2 < 1 || (Y2 > 9999)) || (M2 < 1 || M2 > 12) || (D2 < 1 || D2 > y[M2]) || (A2 != B2) || ((A2 != '/') && (A2 != '-')))       {        fprintf (stderr, "Incorrect format, re-enter date:\n");        scanf("%i%c%i%c%i", &D2, &A2, &M2, &B2, &Y2);        if (!(Y2 % 4)) y[2]=29;      }  /*print second date*/   fprintf (stderr, "Second date = %i%c%i%c%i\n", D2 , A2 , M2 , B2 , Y2);  /*convert first date into days*/   for (F = 1; Y1 > F ; F++)      {      if (F % 4 == 0) (Date1 = Date1 + 366);      else (Date1 = Date1 + 365);     }  for (L = 1; M1 > L ; L++)       Date1 = Date1 + x[L];  Date1 = Date1 + D1;  /*convert second date into days*/   for (F = 1; Y2 > F ; F++)      {      if (F % 4 == 0) (Date2 = Date2 + 366);      else (Date2 = Date2 + 365);     }  for (L = 1; M2 > L ; L++)       Date2 = Date2 + y[L];  Date2 = Date2 + D2;  /*standard output*/   Dif = Date2 - Date1;  printf("\n%i\n\n" , Dif);  /*text output*/   if (Date2 > Date1)       {Dif = Date2 - Date1;     fprintf (stderr , "Indicating that the first date is %i days before second date.\n" , Dif);}  if (Date1 > Date2)       {Dif = Date1 - Date2;     fprintf (stderr , "Indicating that the second date is %i days before first date.\n" , Dif);}   if (Date1 == Date2)       fprintf (stderr , "Indicating that the first date is equal to second date.\n");  } 

When compiling using this: gcc -Wall -ansi date1.c -o date1 This occurs:

date1.c: In function ‘main’: date1.c:70:1: warning: control reaches end of non-void function [-Wreturn-type] 

Is there a simple fix for this or do I have to write my program to use functions propely? I am unable to change how I compile the code as it has to follow a set spec.

Apologies for the poor formatting of my question but this is my first time here and I was hoping to be able to do it alone.

Hope someone can help!

like image 565
stuart194 Avatar asked Mar 30 '14 09:03

stuart194


People also ask

What is Wreturn type?

Warns when a function uses the default int return type or when a return statement is used in a void function.

What does control reaches end of non-void function mean C?

"Control reaches end of non-void function" means your function has a path through it where the function ends without actually returning data of the type declared in the function declaration. In this case, your shift() function is declared to return an int.

What happens if you forget the return statement in a non-void function?

If control reaches the closing curly brace ( } ) of a non- void function without evaluating a return statement, using the return value of the function call is undefined behavior.


1 Answers

You just need to return from the main function at some point. The error message says that the function is defined to return a value but you are not returning anything.

  /* .... */   if (Date1 == Date2)        fprintf (stderr , "Indicating that the first date is equal to second date.\n");     return 0; } 
like image 186
perreal Avatar answered Oct 02 '22 15:10

perreal