2013-10-16 117 views
0

我想问为什么GCC编译我的C代码,虽然它有错误,MSVS注意到。我已经找到解决这些错误的解决方案。但我想知道,为什么海湾合作委员会没有看到他们。这里是我的代码:GCC VS 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; 
} 

感谢您的帮助。

+4

发布特定错误消息 – alrikai

+3

可能有帮助啊,我在声明后看到声明。也许你的问题是微软编译器不支持C99。 MSVS卡在黑暗时代,gcc不是。 –

回答

4

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

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

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

+0

事实上,它编译得很好,在VS2010的80x86版Microsoft®(R)32位C/C++优化编译器版本16.00.30319.01上试过。 –

+1

@LuizFelipe好吧,也许OP的编译器已经过时了。你保存它是一个.c文件还是.cpp文件,这有所作为。 –

+0

是的,你说得对,C编译器停留在C89上,但是cpp编译器不行,你可以强制它使用cpp编译器。 cpp编译器部分支持C++ 11,但正在改进。这是一个很好的解释http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/ –