我想在Windows10上用Visual Studio VC++ 2015编译“libsamplerate.dll”,指的是:http://www.mega-nerd.com/SRC/win32.html。定义有什么问题?
然后,我得到了以下错误:
termination_test.c
.\tests\termination_test.c(82): error C2057: expected constant expression
.\tests\termination_test.c(82): error C2466: cannot allocate an array of constant size 0
.\tests\termination_test.c(82): error C2133: 'in': unknown size
.\tests\termination_test.c(83): error C2057: expected constant expression
.\tests\termination_test.c(83): error C2466: cannot allocate an array of constant size 0
.\tests\termination_test.c(83): error C2133: 'out': unknown size
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe"' : return code '0x2'
“termination_test.c” 从最初: http://www.mega-nerd.com/SRC/download.html 这里是导致错误的功能:
static void
simple_test (int converter)
{
int ilen = 199030, olen = 1000, error ;
{
float in [ilen] ;
float out [olen] ;
double ratio = (1.0 * olen)/ilen ;
SRC_DATA src_data =
{ in, out,
ilen, olen,
0, 0, 0,
ratio
} ;
error = src_simple (&src_data, converter, 1) ;
if (error)
{ printf ("\n\nLine %d : %s\n\n", __LINE__, src_strerror (error)) ;
exit (1) ;
} ;
} ;
return ;
} /* simple_test */
我只是将这两行修改为:
float in [199030] ;
float out [1000] ;
...然后,完美地工作。
但是,定义有什么问题?
int ilen = 199030, olen = 1000, error ;
我把“常量”在INT面前,然后我得到了另一个错误“C2166:左值指定const对象”。 我如何使它无错误?
(PS,这是一个开放的源代码,所以不应该有任何错误。这不是一个问题,但我只是想知道为什么。)
在上面的误差,*预期常量表达式*不*** *** NOT意味着'const int的x'。它表示一个常量表达式,其值在编译时已知,如'#define ilen 199030'和'#define olen 1000'或'enum {olen = 1000,ilen = 199030}' –
代码是正确的。它不是你的编译器。 MSVC不支持C标准的17岁特性,例如VLA。使用符合现代标准的编译器,如gcc或clang。 – Olaf
@David C. Rankin这就是我想要的。现在它工作正常。我把这两个常量大写,表明它们是不可改变的。请让你的评论一个答案。非常感谢! – IanHacker