我正在将遗留代码从gcc迁移到clang。代码中存在很多类型转换问题,即对void指针的算术运算,const char * to char *转换,unsigned char * to char *转换,将父类对象分配给子类。由于代码库非常大,因此对所有内容进行类型转换将是非常麻烦的任务。 是否有任何(或一组)标志用于关闭这些错误?我尝试过-fpermissive或-Wno-error-(错误类型)。
char* Page::pageTitle()
{
jvalue pageObject;
m_javaClass.CallMethod(
m_javaObject.Get(),
"getPageTitle",
"()Ljava/lang/String;",
'L',
(jvalue*)0,
&pageObject );
if (pageObject.l == NULL)
return NULL;
JNIEnv* env = JNIGetEnv();
jboolean isCopy = JNI_TRUE;
const char* pageString = env->GetStringUTFChars(pageObject.l, &isCopy);
return pageString;
}
error: cannot initialise a parameter of type 'jstring' (aka '_jstring *') with an lvalue of type 'jobject' (aka '_jobject *')
jvalue.l是jobject类型,GetStringUTFChars在jni.h中声明为const char* GetStringUTFChars(jstring string, jboolean* isCopy)
和_jstring声明为
class _jstring : public _jobject {}
因此我们尝试将基类对象分配给被视为错误的子类。 考虑到代码库的大小,不可能对所有事件进行类型转换。
是否有任何标志我可以在clag中禁用此类错误?
答案 0 :(得分:1)
你能做的最好的事情是clang++ --std=c++98 -fpermissive
。