Conviene trasformare le date in julian day. La differenza in giorni la si ottiene sottraendo i due valori:

codice:
#include <stdio.h>
#include <stdlib.h>

typedef struct struttura
{
    int g, m, a;
}data;


int IsJulianDate(int year, int month, int day)
{
    if ( year > 1582 )
        return 0;
        
    if ( month > 10 )
        return 0;
        
    if ( day > 4 )
        return 0;
        
    return 1;
}

double CalendarDateToJulianDay(const data *dt)
{
    double Y, M, D;
    double A, B;
        
    B = 0;
    
    D = dt->g;    
        
    if ( dt->m <= 2 )
    {
        Y = dt->a - 1;
        M = dt->m + 12;
    }
    else
    {
        Y = dt->a;
        M = dt->m;
    }
    
    if ( !IsJulianDate(dt->a, dt->m, dt->g) )
    {
        A = (int)(Y/100);
        B = 2 - A + (int)(A/4);
    }
    
    return ( (int)(365.25 * (Y + 4716)) + (int)(30.6001 * (M + 1)) + D + B - 1524.5 );    
}

void JulianDayToCalendarDate(double jd, data *dt)
{
    double num = jd + 0.5;
    int Z = (int)num;
    double F = num - Z;    
    double A, B, C, D, E;
    int alpha;
    
    double decimalDays;
        
    if ( Z < 2299161 )
    {
        A = Z;    
    }
    else
    {
        alpha = (int)( (Z - 1867216.25) / 36524.25 );
        A = Z + 1 + alpha - (int)(alpha / 4);
    }
    
    B = A + 1524;
    C = (int)( (B - 122.1) / 365.25 );
    D = (int)( 365.25 * C );
    E = (int)( (B - D) / 30.6001 );
    
    decimalDays = B - D - (int)(30.6001 * E) + F;
        
    dt->g = (int)decimalDays;
                    
    if ( E < 14 )
    {
        dt->m = E - 1;
    }
    else if ( E == 14 || E == 15 )
    {
        dt->m = E - 13;
    }
    
    if ( dt->m > 2 )
    {
        dt->a = C - 4716;
    }
    else if ( dt->m == 1 || dt->m == 2 )
    {
        dt->a = C - 4715;
    }
}

/*
gcc -Wall -Wextra -pedantic -O2 main.c -o prova
*/

int main()
{
    data dt1;
    data dt2;    
    data dt3;
    
    double jd1;    
    double jd2;    
    double jd3;    
    
    int giorni;    
    
    dt1.g = 2;
    dt1.m = 6;
    dt1.a = 1900;

    dt2.g = 5;
    dt2.m = 1;
    dt2.a = 1990;
    
    jd1 = CalendarDateToJulianDay(&dt1);
    
    jd2 = CalendarDateToJulianDay(&dt2);
    
    giorni = (int)(jd2 - jd1);

    printf("Data 1: %d/%d/%d\n", dt1.g, dt1.m, dt1.a);
    printf("Data 2: %d/%d/%d\n", dt2.g, dt2.m, dt2.a);
    printf("\ndifferenza in giorni: %d\n", giorni);
    
    giorni = 89;
    jd3 = jd2 + giorni;
    
    JulianDayToCalendarDate(jd3, &dt3);
    
    printf("\n%d/%d/%d + %d giorni = %d/%d/%d\n", dt2.g, dt2.m, dt2.a, giorni, dt3.g, dt3.m, dt3.a);
    
    return EXIT_SUCCESS;
}
Output:
codice:
Data 1: 2/6/1900
Data 2: 5/1/1990

differenza in giorni: 32724

5/1/1990 + 89 giorni = 4/4/1990