我想问为什么GCC编译我的C代码,而它有错误,这是MSVS注意到的。我已经找到了解决这些错误的方法。但我想知道,为什么海合会没有看到他们。这是我的代码:

#define _USE_MATH_DEFINES
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>


double randomer( double randitude)
{
    double random;
    if(randitude != 0)
    {
        int integerranditude = randitude*1000000;
        int base = rand()%integerranditude;
        random = (2*(base/1000000.0)) - randitude;
        printf( "%lf\n", random);
    }
    else
    {
        random = 0.0;
    }
    return random;
}

void counttofile(double x, double period, double expression, double amplitude, double random, double randitude)
{
    FILE* wyniki = fopen("wyniki.txt", "wt");
    for(x = 0; x <= period*M_PI*2; x = x + 0.128)
    {
        random = randomer(randitude);
        expression = amplitude*(sin(x) + cos(x)) + random;
        fprintf(wyniki, "(%lf) = %lf\n", x, expression);
        /*expression = sin(x) + cos(x) + random;
        if(fabs(expression) <= fabs(amplitude))
        {
            fprintf(wyniki, "(%lf) = %lf\n", x, expression);
        }
        else
        {
            fprintf(wyniki, "(%lf) = poza zakresem\n", x);
        }*/
    }
    fclose(wyniki);
}
void unitchange(double period, double amplitude)
{
    period = period * 180 / M_PI;
    amplitude = amplitude * 180 / M_PI;
}


int main(void)
{
    srand (time(NULL));
    double x, period, expression, amplitude, randitude, random;
    random = 0;
    int command;
    x = 0;
    printf("Co chciałbyś zrobić? \n1. wygenerowac wartosci funkcji sin(x) + cos(x)\n");
    printf("2. wygenerowac wartosci funkcji sin(x) + cos(x),\n   a nastepnie zaszumic o wskazana amplitude.\n");
    printf("Wpisz numer zadania: ");
    scanf("%d", &command);
    if(command == 1)
    {
            randitude = 0;
            printf("Podam wyniki dzialania sin(x) + cos(x).\nOkresl w jakim zakresie amplitudy mam podac wyniki: ");
            scanf("%lf", &amplitude);
            expression = sin(x) + cos(x);
            printf("\nIle okresow mam policzyc? ");
            scanf("%lf", &period);
            unitchange(period, amplitude);
            counttofile(x, period, expression, amplitude, random, randitude);
    }
    else if(command == 2)
    {
            printf("Podam wyniki dzialania sin(x) + cos(x), zaszumionego o zadana amplitude.\nOkresl w jakim zakresie amplitudy mam podac wyniki: ");
            scanf("%lf", &amplitude);
            expression = sin(x) + cos(x);
            printf("\nIle okresow mam policzyc? ");
            scanf("%lf", &period);
            printf("Amplituda szumu ma wynosić: ");
            scanf("%lf", &randitude);
            unitchange(period, amplitude);
            counttofile(x, period, expression, amplitude, random, randitude);
    }
    else
    {
        printf("\nNieprawidlowy numer polecenia. Sprobuj jeszcze raz.");
    }
    int proba = 0;
    for(proba =0; proba <=10; proba ++)
    {
        randomer(randitude);
    }
    return 0;
}

谢谢你的帮助。

最佳答案

这不会在MSVS中编译,因为它在语句后包含声明。MSVS是基于一个早期版本的C,不允许这样做。gcc基于一个更高版本的C,它确实支持这一点。

int main(void)
{
    srand (time(NULL));
    double x, period, expression, amplitude, randitude, random;

我相信MSVS是基于C89的,这个特性是在C99中引入的。如果我错了,肯定有人会纠正我的。

关于c - GCC vs MSVS编译器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19412199/

10-11 15:45