如何在Rust编译时输出警告信息?求等效C宏实现
Rust中实现类似C的编译时警告/错误提示
问题背景
我需要在Rust中实现类似C语言里#pragma message、#error、#warning的功能,用来提醒自己和团队成员未来需要修补的未解决问题,比如希望在编译时打印如下提示:
// 期望编译时输出警告信息 #[warning ("Do not forget to fix this when you have the missing data")] let pbj = MyObject { is_something: false } ; // TODO: 拿到数据后修正为正确值
已经排除了todo()宏(会导致panic,不符合需求),尝试过诊断属性但可能使用方式有误。
解决方案
一、编译错误(强制终止编译,对应C的#error)
使用Rust内置的compile_error!宏,编译时会直接报错并终止,适合必须立即处理的问题:
compile_error!("必须修复:拿到数据后将is_something改为正确值"); let pbj = MyObject { is_something: false };
二、编译警告(仅提示不终止,对应C的#warning/#pragma message)
方法1:利用#[deprecated]属性
虽然该属性本意是标记废弃代码,但可以通过note字段输出自定义警告信息,编译时会触发警告:
#[deprecated(note = "Do not forget to fix this when you have the missing data")] let pbj = MyObject { is_something: false };
该属性可应用于变量、函数、结构体等,编译时会在输出中显示指定的note内容。
方法2:使用Clippy的fixme/todo lint
如果项目启用了Clippy,直接在代码中写注释即可触发警告:
let pbj = MyObject { is_something: false }; // FIXME: Do not forget to fix this when you have the missing data
确保Clippy的clippy::todo和clippy::fixme lint处于启用状态(默认是warn级别),编译时会输出对应的警告信息。
内容的提问来源于stack exchange,提问作者Avba
相关产品推荐
相关产品推荐

