为什么这个 C 代码在 Visual Studio 2013 Ultimate 中是非法的?
const unsigned int x = 64;
char resultBufNative[x+1];
它给error C2057: expected constant expression
.
原始问题
我完全被这个迷惑了。
相关功能:
jstring Java_com_nabto_api_NabtoCApiWrapper_nabtoGetSessionToken(JNIEnv* env, jclass thiz, jobject sessionObj)
{
const size_t size = 64;
char resultBufNative[size+1];
size_t resultLen;
//Get the session
nabto_handle_t session;
session = (nabto_handle_t) (*env)->GetDirectBufferAddress(env, sessionObj);
nabto_status_t nabtoStatus = nabtoGetSessionToken(session, resultBufNative, size, &resultLen);
if (nabtoStatus == NABTO_OK && resultLen <= size) {
// Terminate char array, convert to java string, free buffer and return result
resultBufNative[resultLen] = 0;
jstring result = (*env)->NewStringUTF(env, resultBufNative);
//nabtoFree(resultBufNative);
return result;
}
else {
return NULL;
}
}
错误信息:error C2057: expected constant expression
在线的char resultBufNative[size+1];
对我来说,这使得相关代码如下:
const size_t size = 64;
char resultBufNative[size+1];
显然,const size_t + 1
不是一个常量表达式。
没有定义或宏size
在讨论(用 xyzabc 替换它会产生相同的错误)。size_t
定义为typedef unsigned int __w64 size_t
当我size_t
在 IDE(Visual Studio Ultimate 2013)中鼠标悬停时。
在 C2057 预期的常量表达式错误之后,编译器又给出了 2 个错误:
C24166: cannot allocate array of size 0
C2133: 'resultBufNative': unknown size
对于同一行代码。自然,这些是因为它不知道是什么size + 1
,所以它变成了0。
使用
constexpr const size_t size = 64;
char resultBufNative[size+1];
给error C2065: 'constexpr' : undeclared identifier
.
使用
const size_t size = 65;
char resultBufNative[size];
给error C2057: expected constant expression
.
使用
static const size_t size = 64;
char resultBufNative[size+1];
给error C2057: expected constant expression
.
使用
const unsigned int x = 64;
char resultBufNative[x+1];
给error C2057: expected constant expression
.
我想我想做的事情不受支持。