【问题标题】:Turn off type conversion in clang关闭clang中的类型转换
【发布时间】:2016-09-26 07:00:39
【问题描述】:

我正在将旧代码从 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 是 jobject 类型,GetStringUTFChars 在 jni.h 中声明为 const char* GetStringUTFChars(jstring string, jboolean* isCopy) 并且 _jstring 被声明为

class _jstring : public _jobject {}

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

是否有任何标志可以让我在 clag 中禁用此类错误?

【问题讨论】:

  • 出错是有原因的,最好的办法是修复它们。

标签: c++ c++11 compiler-errors type-conversion clang++


【解决方案1】:

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

【讨论】:

  • 在使用 gcc -fpermissive 编译时,它会将错误降低为警告,但它不适用于 clang++。我在使用 clang++ 时遇到了同样的错误。
  • @AbhayKumar 您是否设法将错误变成了对 Clang 的警告?
猜你喜欢
  • 2021-06-06
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多