在 STM32 开发中,我们经常会遇到 Keil MDK 编译器抛出的 #1-D: last line of file ends without a newline 警告(如图)。这个警告本身不影响程序运行,但会让编译输出变得杂乱,影响我们快速定位真正的错误。本文将分享几种解决方法,帮助你彻底告别这个烦人的警告。


一.警告产生的原因

这个警告的本质是C 语言文件格式规范要求:源文件 / 头文件的最后一行必须以换行符(\n)结束,如果你的 .h.c 文件最后一行代码后没有空行,Keil 就会报出这个警告,例如:

二:解决办法

1.不屏蔽警告,手动Enter空行

逐个点击警告跳至对应文件,把光标移到最后一行代码的末尾按一下回车键(Enter)保存,重新编后警告直接消失。

2.单.h文件屏蔽警告

在想屏蔽的.h文件最顶部加一行:#pragma diag_suppress 1,此时包含这个.h文件的.c/.h文件都不会再出现这个警告。仅对当前文件生效,不会影响工程中其他文件的警告检查,适合精细化控制

3.全局屏蔽警告

打开工程后点击工具栏 “魔法棒” 图标(Options for Target),切换至C/C++选项卡,在Misc Controls输入框的原有参数后追加--diag_suppress=1(用空格分隔,如--locale=english -no-multibyte-chars --diag_suppress=1),点击OK保存设置并重新编译,即可让工程中所有文件的该类警告被彻底屏蔽。

4.效果

无论哪种方法,最终都可以消除这个警告,如下:

三.写在后面

本博客仅记录自己的学习进程,无任何商业用途,基于论坛上已经存在的内容结合自己实操过程完成了此博客,自己也做了一些细节验证,在此记录下来作为学习沉淀。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐