从下面的代码片段开始,我尝试测试NewGlobalRef
并尝试在if
块的本地范围内声明它后使clsStr
全局。
jstring Java_Package_LocalAndGlobalReference_returnGlobalReference (JNIEnv *env, jobject obj) { if(1) { printf("In function make global referencen"); 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 }
当我运行上面的代码片段时,我收到以下错误:
W:elitajnitestersworkspacecLGRLGR.c:31: error: 'clsStr' undeclared (first use in this function) W:elitajnitestersworkspacecLGRLGR.c:31: error: (Each undeclared identifier is reported only once W:elitajnitestersworkspacecLGRLGR.c:31: error: for each function it appears in.)
为什么我在使用声明clsStr = (*env)->NewGlobalRef(env,cls)
var全局时,得到的错误是clsStr
未定义?
当您在块中声明变量时(在这种情况下,如果if(1) { ... }
语句在块中声明clsStr
),该变量的范围(及其生命周期)就是该块。 这意味着在块之后 return clsStr
时它不存在。
你也可以
当我使用语句
clsStr = (*env)->NewGlobalRef(env,cls)
var global时
这是一种误解 – 你不能通过任务使全局变量; 你通过全球范围内的声明来做到这一点。 您可以通过赋值初始化变量,但这与其范围没有任何关系。
以上就是c/c++开发分享var不会变成全局但仍然是本地的相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519766.html