c/c++语言开发共享var不会变成全局但仍然是本地的

从下面的代码片段开始,我尝试测试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

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐