다음 스 니펫에서 나는 NewGlobalRef
을 테스트하고 if
블록의 로컬 범위에서 선언 한 후 clsStr
을 전역으로 만들려고합니다.var는 전역이 아니지만 로컬로 남아 있습니다
jstring Java_Package_LocalAndGlobalReference_returnGlobalReference
(JNIEnv *env, jobject obj) {
if(1) {
printf("In function make global reference\n");
jclass clsStr ;
jclass cls = (*env)->FindClass(env,"java/lang/String");
if(cls == NULL)
return NULL;
// create a global reference of clsStr
clsStr = (*env)->NewGlobalRef(env,cls);
// Delete the local reference, which is no longer userful
(*env)->DeleteLocalRef(env,cls);
if(clsStr == NULL)
return NULL;
}
return clsStr; // statement 31
}
나는 다음과 같은 오류를 얻을 위의 코드를 실행하면 : 내가 오류가 난 VAR 세계가 satement clsStr = (*env)->NewGlobalRef(env,cls)
를 사용하는 것이했으면 clsStr
이 정의라고 말하는 이유는 무엇입니까
W:\elita\jnitesters\workspace\c\LGR\LGR.c:31: error: 'clsStr' undeclared (first use in this function)
W:\elita\jnitesters\workspace\c\LGR\LGR.c:31: error: (Each undeclared identifier is reported only once
W:\elita\jnitesters\workspace\c\LGR\LGR.c:31: error: for each function it appears in.)
를?
if (1) {...} 문제는 무엇입니까? – SirDarius
@SirDarius를 테스트 목적으로 만 사용하십시오. 왜 그런 질문을해야합니까? :) –
이것은 {{}를 사용하여 로컬 명명 범위를 만들 수 있기 때문에 이것은 순수한 호기심입니다. 왜냐하면 잘, 나는 그런 테스트의 실제적인 목적을 보지 못하기 때문입니다. – SirDarius