• Android12之#pragma clang diagnostic ignored总结(一百六十八)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:解决Android12编译报错:error: BUILD_COPY_HEADERS is obsolete。

    2.`#pragma clang diagnostic push、#pragma clang diagnostic pop、#pragma clang diagnostic ignored "-Wconversion"指令介绍

    1. #pragma clang diagnostic push:将当前的编译器警告和错误状态推入一个堆栈中,以便后续可以通过pop指令还原。

    2. #pragma clang diagnostic pop:将之前保存在堆栈中的编译器警告和错误状态还原,恢复到之前的状态。

    3. #pragma clang diagnostic ignored "-Wconversion":用于忽略编译器对指定的警告类型的警告信息。

    3.忽略警告语法介绍

    1.忽略警告语法通用语法

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored “-相关命令”
    // 自己的代码
    #pragma clang diagnostic pop

    2.可以忽略的警告

    1.方法弃用警告 “-Wdeprecated-declarations”
    2.不兼容指针类型 “-Wincompatible-pointer-types”
    3.循环引用警告 “-Warc-retain-cycles”
    4.未使用变量警告 “-Wunused-variable”
    5.已废弃属性或方法警告"-Wdeprecated-declarations"

    4.代码实例

    1.忽略隐式类型转换警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wconversion"
    
    #include 
    
    int main() {
        int x = 10;
        short y = x;  // 隐式类型转换,编译器会发出警告
    
        std::cout << y << std::endl;
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    第一步:#pragma clang diagnostic push将编译器警告状态保存在堆栈中,
    第二步:使用#pragma clang diagnostic ignored "-Wconversion"指令忽略了编译器对隐式类型转换的警告。
    第三步:使用#pragma clang diagnostic pop恢复了之前的编译器警告状态。

    2.忽略未使用函数的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-function"
    
    #include 
    
    void unusedFunction() {
        std::cout << "This function is unused" << std::endl;
    }
    
    int main() {
        std::cout << "Hello, world!" << std::endl;
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.忽略未初始化变量的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wuninitialized"
    
    #include 
    
    int main() {
        int x;
        std::cout << x << std::endl; // 未初始化变量,会引起警告
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4.忽略数组越界的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warray-bounds"
    
    #include 
    
    int main() {
        int arr[3] = {1, 2, 3};
        std::cout << arr[5] << std::endl; // 越界访问数组,会引起警告
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.忽略未使用参数的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-parameter"
    
    #include 
    
    void unusedParameter(int x) {
        std::cout << "This parameter is unused" << std::endl;
    }
    
    int main() {
        unusedParameter(10);
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6.忽略未定义行为的警告(例如除以零)

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdiv-by-zero"
    
    #include 
    
    int main() {
        int x = 10;
        int y = 0;
        int z = x / y; // 除以零,会引起未定义行为的警告
    
        std::cout << z << std::endl;
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    7.忽略常量表达式溢出的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wconstant-conversion"
    
    #include 
    
    int main() {
        const int x = 2147483647; // INT_MAX
        const int y = x + x; // 常量表达式溢出,会引起警告
    
        std::cout << y << std::endl;
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    8.忽略未使用的私有成员函数的警告

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-private-field"
    
    #include 
    
    class MyClass {
    private:
        int unused;
    
        void unusedFunction() {
            std::cout << "This private function is unused" << std::endl;
        }
    };
    
    int main() {
        MyClass obj;
    
        return 0;
    }
    
    #pragma clang diagnostic pop
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    基于ISO14229协议的单帧以及多帧Can发送代码
    用于持续医疗监测的无袖带血压估计算法【翻译】
    jQuery 用 post() 传递数组给 php
    python正则表达式的使用
    通过java向jar写入新文件
    机器学习系列:LightGBM 可视化调参
    C语言 计算∑(k=1—100)k+∑(k=1—50)k²+∑(k=1—10)1/k的值
    Spark杂谈
    vite之 import.meta.glob批量引入文件
    东南亚跨境电商平台Lazada、Shopee、速卖通转化率低怎么办?(测评自养号)
  • 原文地址:https://blog.csdn.net/u010164190/article/details/134058921