gpt4 book ai didi

c - 如何将 NULL 分配给 float/double 变量?

转载 作者:行者123 更新时间:2023-12-02 06:32:31 24 4
gpt4 key购买 nike

我在使用 JNI 时遇到问题。

jboolean z = (jboolean) NULL; // ok
jbyte b = (jbyte) NULL; // ok
jchar c = (jchar) NULL; // ok
jshort s = (jshort) NULL; // ok
jint i = (jint) NULL; // ok
jlong j = (jlong) NULL; // ok

jobject l = (jobjec) NULL; // ok

jfloat f = (jlong) NULL; // NOT OK
jdouble d = (jdouble) NULL; // NOT OK

编译器提示
[ERROR] /....c:112:28: error: pointer cannot be cast to type 'jfloat' (aka 'float')
[ERROR] jfloat result = (jfloat) NULL;
[ERROR] ^~~~
[ERROR] /usr/include/sys/_types/_null.h:29:15: note: expanded from macro 'NULL'
[ERROR] #define NULL __DARWIN_NULL
[ERROR] ^~~~~~~~~~~~~
[ERROR] /usr/include/sys/_types.h:52:23: note: expanded from macro '__DARWIN_NULL'
[ERROR] #define __DARWIN_NULL ((void *)0)
[ERROR] ^~~~~~~~~~~
[ERROR] 1 error generated.

我怎样才能解决这个问题?

我正在为这些值中的每一个编写方法。
jboolean doSome() {
jboolean result = (jboolean) NULL;
/*
* at here result may be initialized or remain as NULL
*/
return result;
}

我打算写一个函数结合以下三种方法。
(*env)->GetObjecClass(JNIEnv *, jobject);
(*env)->GetMethodID(JNIEnv *, jclass, char *, char *);
(*env)->CallBooleanMethodA(JNIEnv *, jclass, jmethodID, jvalue *);

像这样。
jboolean CallBooleanMethodAMmMs(JNIEnv * env, jobject obj, char * mname,
char * msig, jvalue * args) {
jboolean result = (jboolean) NULL;
jclass clazz = (*env)->GetObjectClass(env, obj);
jmethodID methodID = (*env)->GetMethodID(env, clazz, mname, msig);
if (methodID != NULL) {
result = (*env)->CallBooleanMethodA(env, obj, methodID, args);
}
(*env)->DeleteLocalRef(env, clazz);
return result;
}

我以为我可以使用 NULL对于任何不成功的情况,例如 methodID == NULL .

我想我应该使用 jobject而不是原语,对吧?

最佳答案

您不能(也不应该)将指针分配给普通变量。

正如您所提到的,我真的不知道为什么它允许其他一些普通数据类型。编译器应该对从指针到其他非指针数据类型的所有赋值产生同样的警告
NULL是stdio.h中定义的一个void指针,用于初始化指针类型变量。使用简单的 0而不是 NULL如果您想初始化非指针变量。

关于c - 如何将 NULL 分配给 float/double 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30736386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com