0

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

#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;
}

感谢帮助。

4

1 回答 1

4

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

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

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

于 2013-10-16T19:49:56.193 回答