当前位置: 首页 > article >正文

常见的keil 编译报警记录。

我将删除最后一列(数量),并新增一列提供每种警告类型的具体示例,帮助用户更好地理解这些警告:

警告类型描述示例
-Wpadded数据结构对齐填充struct Point { char c; int x; }; // 编译器会在c后添加填充以对齐x
-Wimplicit-int-conversion隐式类型转换导致精度损失long value = 0xFFFFFFFF; int x = value; // 从long到int的转换可能丢失数据
-Wtautological-unsigned-zero-compare无意义的无符号数比较unsigned int x; if (x < 0) { ... } // 无符号数永远不会小于0
-Wcovered-switch-defaultswitchdefault覆盖了所有枚举值enum Color {RED, GREEN, BLUE}; switch(color) { case RED: ...; case GREEN: ...; case BLUE: ...; default: ... } // default冗余
-Woverlength-strings字符串长度超过ISO C99标准限制char *str = "这是一个非常长的字符串,超过了ISO C99标准限制的509字符..."; // 超长字符串
-Wimplicit-int-float-conversion隐式从整数到浮点数的转换int i = 42; float f = i; // 整数到浮点数可能损失精度
-Wdouble-promotion浮点数精度提升(如floatdoublefloat f = 1.0f; double result = sin(f); // sin函数将float参数提升为double
-Wformat-nonliteral格式字符串不是字符串字面量char *fmt = "%d"; printf(fmt, 10); // 格式字符串是变量而非字面量
-Wnewline-eof文件末尾缺少换行符源文件最后一行代码后没有空行或换行符
-Wmissing-variable-declarations缺少变量的外部声明int globalVar = 5; // 在.c文件中定义但没有在.h文件声明
-Wcast-qual指针类型转换丢失volatile修饰符volatile int *p; int *q = (int *)p; // 转换丢失了volatile修饰符
-Wshadow局部变量遮蔽全局变量int count = 0; void func() { int count = 1; } // 局部count遮蔽了全局count
-Wunused-parameter未使用的函数参数void func(int x) { return; } // 参数x未在函数体内使用
-Wmissing-prototypes缺少函数原型声明int func() { return 0; } // 函数实现前未声明原型
-Wstrict-prototypes函数定义缺少原型int func(); // 函数声明未明确指定参数类型
-Wreturn-typevoid函数未返回值int getNum() { if(x > 0) return x; } // 某些路径没有返回值
-Wsign-conversion隐式类型转换改变符号unsigned int u = 1; int i = -1; if (u > i) { ... } // 有符号和无符号比较导致符号转换
-Wswitch-enumswitch未显式处理所有枚举值enum Color {RED, GREEN, BLUE}; switch(color) { case RED: ...; case GREEN: ...; } // 缺少BLUE的处理
-Wunused-variable未使用的变量void func() { int temp = 5; return; } // 变量temp声明但未使用
-Wformat格式化字符串与参数类型不匹配printf("%d", "hello"); // 格式符%d期望整数但提供了字符串
-Wimplicit-function-declaration隐式函数声明void func() { custom_func(); } // 调用未声明的函数custom_func
-Wuninitialized变量未初始化int x; printf("%d", x); // 使用x前未初始化
-Wunused-function未使用的函数static void helper() { ... } // 定义了静态函数但从未调用
-Wmissing-noreturn缺少noreturn属性声明void exit_program() { exit(1); } // 函数不会返回但缺少noreturn属性
-Wimplicit-fallthroughswitchif中可能的意外穿透switch(x) { case 1: do_something(); case 2: do_another(); } // 缺少break导致执行穿透

这个表格删除了原来的数量列,并添加了每种警告类型的具体示例,帮助用户更直观地理解这些编译警告的含义和潜在问题。


http://www.kler.cn/a/561556.html

相关文章:

  • Windows Server 搭建 RADIUS 认证服务器
  • 【Leetcode】动态规划:从经典例题剖析解题精要
  • SQL进阶实战技巧:汽车转向次数分析 | 真实场景案例
  • 计算机网络之路由协议(OSPF路由协议)
  • HTTP/HTTPS 服务端口监测的简易实现
  • 2025年智能电力系统与数据驱动创新国际学术会议(IPSDDI 2025)
  • 从两地三中心到多地多中心,OceanBase如何实现金融级高可用
  • 【Python专栏】Python 开发-pycharm安装
  • 接上一主题,在Qt中,用信号代替函数指针,最终目标都是能直接使用lambda表达式,效果一样。
  • 【LLM】本地部署LLM大语言模型+可视化交互聊天,附常见本地部署硬件要求(以Ollama+OpenWebUI部署DeepSeekR1为例)
  • 【Linux网络编程】 HTTP协议
  • C++的异步相关操作
  • 信创终端上如何将PDF文件转为OFD文件
  • [java基础-JVM篇]2_垃圾收集器与内存分配策略
  • 从DeepSeek大爆发看AI革命困局:大模型如何突破算力囚笼与信任危机?
  • 量子计算的基本运算:Hadamard 门、CNOT 门、Pauli 门详解
  • 深度学习进阶:构建多层神经网络
  • Vue 3的Proxy比Vue 2的Object.defineProperty有哪些优势?
  • 和Claude对战黑白棋!一起开发AI对弈游戏
  • C++复习专题——泛型编程(模版),包括模版的全特化和偏特化