Android12之#pragma clang diagnostic ignored总结(一百六十八)
最佳答案 问答题库438位专家为你答疑解惑
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:解决Android12编译报错:error: BUILD_COPY_HEADERS is obsolete。
2.`#pragma clang diagnostic push、#pragma clang diagnostic pop、#pragma clang diagnostic ignored "-Wconversion"指令介绍
-
#pragma clang diagnostic push
:将当前的编译器警告和错误状态推入一个堆栈中,以便后续可以通过pop
指令还原。 -
#pragma clang diagnostic pop
:将之前保存在堆栈中的编译器警告和错误状态还原,恢复到之前的状态。 -
#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 <iostream>int main() {int x = 10;short y = x; // 隐式类型转换,编译器会发出警告std::cout << y << std::endl;return 0;
}#pragma clang diagnostic pop
第一步:
#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 <iostream>void unusedFunction() {std::cout << "This function is unused" << std::endl;
}int main() {std::cout << "Hello, world!" << std::endl;return 0;
}#pragma clang diagnostic pop
3.忽略未初始化变量的警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wuninitialized"#include <iostream>int main() {int x;std::cout << x << std::endl; // 未初始化变量,会引起警告return 0;
}#pragma clang diagnostic pop
4.忽略数组越界的警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warray-bounds"#include <iostream>int main() {int arr[3] = {1, 2, 3};std::cout << arr[5] << std::endl; // 越界访问数组,会引起警告return 0;
}#pragma clang diagnostic pop
5.忽略未使用参数的警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-parameter"#include <iostream>void unusedParameter(int x) {std::cout << "This parameter is unused" << std::endl;
}int main() {unusedParameter(10);return 0;
}#pragma clang diagnostic pop
6.忽略未定义行为的警告(例如除以零)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdiv-by-zero"#include <iostream>int main() {int x = 10;int y = 0;int z = x / y; // 除以零,会引起未定义行为的警告std::cout << z << std::endl;return 0;
}#pragma clang diagnostic pop
7.忽略常量表达式溢出的警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wconstant-conversion"#include <iostream>int main() {const int x = 2147483647; // INT_MAXconst int y = x + x; // 常量表达式溢出,会引起警告std::cout << y << std::endl;return 0;
}#pragma clang diagnostic pop
8.忽略未使用的私有成员函数的警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-private-field"#include <iostream>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
99%的人还看了
相似问题
- 编译器安全
- Linux——编译器gcc/g++、调试器gdb以及自动化构建工具makefilemake详解
- AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)
- 基于Google Colaboratory安装Go语言编译器操作流程
- AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)
- [C++ 中]:6.类和对象下(static成员 + explicit +友元函数 + 内部类 + 编译器优化)
- 【Linux系统学习】系统编程开发工具编译器gcc/g++使用
- 详解三大编译器: gcc、llvm 和 clang (icc/icpc/ifort)
- 【C/C++】使用 g++ 编译器编译 C++ 程序的完全指南
- Linux开发工具之文本编译器vim
猜你感兴趣
版权申明
本文"Android12之#pragma clang diagnostic ignored总结(一百六十八)":http://eshow365.cn/6-26075-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 部署应用链太费心?Tanssi 教你轻松开发部署
- 下一篇: 算法——贪心算法