Visual Studio 2013 Ultimate でこの C コードが違法なのはなぜですか?
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に置き換えると同じエラーが発生します)。IDE(Visual Studio Ultimate 2013)でマウスオーバーしたときsize_t
と定義されています。typedef unsigned int __w64 size_t
size_t
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
ます。
私がやりたいことはサポートされていないと思います。