2013-10-16 120 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/ –