GCC与MSVS编译器
我想问一下,为什么GCC编译了我的C代码,而它却有错误,MSVS注意到了这一点。我已经找到了解决这些错误的方法。但我想知道,为什么GCC没有看到他们。这是我的密码:GCC与MSVS编译器,c,visual-studio-2010,gcc,C,Visual Studio 2010,Gcc,我想问一下,为什么GCC编译了我的C代码,而它却有错误,MSVS注意到了这一点。我已经找到了解决这些错误的方法。但我想知道,为什么GCC没有看到他们。这是我的密码: #define _USE_MATH_DEFINES #include <stdlib.h> #include <stdio.h> #include <math.h> #include <time.h> #include <stdlib.h> double randome
#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", &litude);
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", &litude);
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;
}
定义使用数学定义
#包括
#包括
#包括
#包括
#包括
双随机数发生器(双随机数)
{
双随机;
如果(随机数!=0)
{
整数=随机数*1000000;
int base=rand()%integeranditude;
随机=(2*(基数/1000000.0))-随机度;
printf(“%lf\n”,随机);
}
其他的
{
随机=0.0;
}
返回随机;
}
无效计数文件(双x、双周期、双表达式、双振幅、双随机、双随机)
{
文件*wyniki=fopen(“wyniki.txt”、“wt”);
对于(x=0;x这将不会在MSVS中编译,因为它在语句后包含一个声明。MSVS基于早期版本的C,不允许这样做。gcc基于更高版本的C,支持这样做
int main(void)
{
srand (time(NULL));
double x, period, expression, amplitude, randitude, random;
我相信MSVS是基于C89的,这项功能是在C99中引入的。如果我错了,毫无疑问会有人纠正我。这不会在MSVS中编译,因为它在语句后包含声明。MSVS基于早期版本的C,但不允许这样做。gcc基于更高版本的C,它支持这一点
int main(void)
{
srand (time(NULL));
double x, period, expression, amplitude, randitude, random;
我相信MSV是基于C89的,这项功能是在C99中引入的。如果我错了,毫无疑问会有人纠正我。发布特定的错误消息可能会有所帮助啊,我在一条语句后看到了一条声明。也许你的问题是Microsoft编译器不支持C99。MSV陷入了黑暗时代,gcc不支持。发布特定的错误消息可能会有所帮助啊,我在一个声明后看到了一个声明。也许你的问题是Microsoft编译器不支持C99。MSV被困在黑暗时代,gcc不是。实际上它编译得很好,在Microsoft(R)上试用过VS2010附带的适用于80x86的32位C/C++优化编译器版本16.00.30319.01。@LuizFelipe好的,可能OP的编译器已过期。您是否将其保存为.C文件或.cpp文件,这会产生影响。是的,您是正确的,C编译器卡在C89上,但cpp编译器没有,您可以强制它使用cpp编译器。cpp编译器部分支持C++ 11,但正在改进。这里给出了一个很好的解释,这是C,编译它是C++的一种狡猾的动作。但是MSVS 2012/2013终于允许了。实际上它编译得很好,在微软(R)上尝试过。VS2010附带的适用于80x86的32位C/C++优化编译器版本16.00.30319.01。@LuizFelipe好的,可能OP的编译器已过期。您是否将其保存为.C文件或.cpp文件,这会产生影响。是的,您是正确的,C编译器卡在C89上,但cpp编译器没有,您可以强制它使用cpp编译器。cpp编译器部分支持C++ 11,但正在改进。这里给出了一个很好的解释,这意味着C,编译它作为C++是一个狡猾的动作。但是MSV 2012/2013最终允许这样做。