关闭clang中的类型转换

Turn off type conversion in clang

本文关键字:类型转换 clang 关闭      更新时间:2023-10-16

我正在将一个遗留代码从gcc迁移到clang。代码中有很多类型转换问题,即对void指针的算术运算,const char*到char*的转换,unsigned char*到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是任务类型,GetStringUTFChars在jni.h中声明为const char* GetStringUTFChars(jstring string, jboolean* isCopy)_jstring声明为

class _jstring : public _jobject {}

所以我们试图将基类对象分配给子类,这被视为错误。考虑到代码库的大小,对所有出现的情况进行类型转换是不可行的。

是否有任何标志,通过它我可以禁用这种类型的错误在阻塞?

你能做的最好的事情是clang++ --std=c++98 -fpermissive