Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

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

Writer Matthew Martinez

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 date1This 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!

2 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;
}
3

You can also use EXIT_SUCCESS instead of return 0;. The macro EXIT_SUCCESS is actually defined as zero, but makes your program more readable.

2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy