qsort : sorting integers of type long long int

This is a program I wrote to compare large integers:
#include<stdlib.h>

int compare(const void *a,const void b)
{
if(
(long long int )a-(long long int )b<0)
return -1;
if(
(long long int )a-(long long int )b==0)
return 0;
if(
(long long int )a-(long long int *)b>0)
return 1;
}
int main()
{
long long int n;
scanf("%lld",&n);
long long int i;
long long int a[n];
for(i=0;i<n;i++)
{
scanf("%lld",&a[i]);
}
qsort(a,n,sizeof(long long int),compare);
for(i=0;i<n;i++)
{
printf("%lld",a[i]);
}
return 0;
}
It gives following warning:“control reaches end of non-void function”
How do i resolve this?

An improved version of you code is:

long long compare (const void * a, const void * b)
{
  return ( *(long long*)a - *(long long*)b );
}
int main()
{
    long long n;
    scanf("%lld",&n);
    long long i;
    long long a[n];
    for(i=0;i < n;i++)
        scanf("%lld",&a[i]);
    qsort(a,n,sizeof(long long int),compare);
    for(i=0;i < n;i++)
        printf("%lld\n",a[i]);
    return 0;
}

You faced a problem probably because of the return type you used in compare function is int, which should have been long long.

I could not properly understand your code ( I’m a newbie ) but I know that you need < stdio.h > for printf() and scanf().

@sudipto_roy
the prototype for qsort in stdlib.h is

void qsort(void *base, size_t nmemb, size_t size,
      int (*compar)(const void *, const void *));

so even if your compare function’s return data type is long long it will be casted into int

the error is in your compare function it should be

int compare(const void* a, const void* b)
{
    if(*(long long int*)a - *(long long int*)b < 0)
        return -1;
    if(*(long long int*)a - *(long long int*)b == 0)
        return 0;
    if(*(long long int*)a - *(long long int*)b > 0)
        return 1;
}

@eightnoteight Sir, I did not mention the headers in my answer, as they were not mentioned in the question. Including stdlib.h is well understood.