所以我的代码中有以下“形状”:
mystruct t;
switch(something){
case THIS:
t = {/*initialization*/};
break;
case THAT:
t = {/*initialization*/};
break;
case AND_THE_OTHER:
t = {/*initialization*/};
break;
}
gcc
坚持在{
:
error: expected expression before '{' token
t = {
^
为什么呢? gcc
认为我在做什么?干净的方法是什么?
答案 0 :(得分:2)
您正在做的是分配,而不是初始化。初始化只能在定义变量时执行。大括号可用于初始化变量,但不能分配。
您需要单独指定结构的每个成员。
答案 1 :(得分:2)
int EXT_REF Java_JNITest_CallJava(
JNIEnv* i_pjenv,
jobject i_jobject
)
{
jclass jcSystem;
jmethodID jmidGetProperty;
LPWSTR wszPropName = L"java.version";
jcSystem = i_pjenv->FindClass("java/lang/System");
if(NULL == jcSystem)
{
return -1;
}
jmidGetProperty = i_pjenv->GetStaticMethodID(jcSystem,
"getProperty", "(Ljava/lang/String;)Ljava/lang/String;");
if(NULL == jmidGetProperty)
{
return -1;
}
jstring joStringPropName = i_pjenv->NewString((const jchar*)wszPropName, wcslen(wszPropName));
jstring joStringPropVal = (jstring)i_pjenv->CallStaticObjectMethod(jcSystem,
jmidGetProperty, (jstring)joStringPropName);
const jchar* jcVal = i_pjenv->GetStringChars(joStringPropVal, JNI_FALSE);
printf("%ws = %ws\n", wszPropName, jcVal);
i_pjenv->ReleaseStringChars(joStringPropVal, jcVal);
return 0;
}
C99 +支持此功能,但GCC支持C90扩展。