你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

巧用 STM32CubeIDE 之编译警告

[复制链接]
STMCU小助手 发布时间:2023-6-29 22:21
1. 前言
2 g* H- G& J* Y3 S3 I( [6 @2 C) o  D编译警告对于工程师们来说,是再常见不过的东西了。对于严谨的工程师们,任何 warning 都是不会忽视的。
3 T  \3 ^, h# m$ g7 u% ]% b3 d2 s# \6 x! N; l# r
2. 巧妙使用 warning
8 h2 B6 X2 c4 D, n1 U& j! q6 a* K
/ p9 i" g- N, @7 L
在 STM32CubeIDE 中可以通过warning(甚至 error)的方式来通知工程师,使得一些容易遗漏的配置得到重视。  t% E7 j9 w# R( H# Z0 G
# c& F/ s( G3 q) l* b: _* w
例如,在释放参考代码给客户时,希望客户注意到里面的项目名称和项目版本,那么我们可以在代码中,通过“#error ”来强调必须要修改的信息,通过“#warning”来备注需要注意的信息。具体代码如图 1:
1 N) M; z3 a; n  S, b8 K% K9 |* q- E5 h
微信图片_20230629222104.png 5 ~2 r; N9 V" u* p$ N. ~1 E! u5 d( ]3 _

; P* b" ]( v7 U1 `1 ]7 `这样,当客户编译工程时,会出现 error 和 warning,见图 2,只有将“#error”和 “#warning”两行分别注释掉,才会分别消除这两项编译信息,以此达到警示客户的目的。" e) r' m1 s8 ^2 p

( e( w3 D$ p2 s% [ 微信图片_20230629222101.png
6 t9 U+ ~8 j  O! r( C
8 A! Q# R0 ~6 U' k9 s! y8 a9 K
2.1. 主动屏蔽特定的 warning

7 u8 ^; E, t& ?5 o) ]3 X9 ]在有些场景,我们还可以在特定的代码或者文件作用域内,主动屏蔽特定的 warning。
, x% }' _/ m* v# X/ C3 F  `
8 d( h$ }+ E3 }0 o( Y5 r" r( `例如,工程中写了一个测试函数“void MyTestFunction(void)”,但是在工程中暂时没有被调用,直接编译会得到“Wunused-function”的 warning。
+ @# ^" n3 v" F* H- r: X) l* V4 B
但是如果在代码中添加这样的语句:
' M* Q0 I+ {4 i( L
9 q8 |. H8 v$ R. }3 D  {
#pragma GCC diagnostic ignored "-Wunused-function"。 ) Q* ~! \2 U- U, @& G! \8 o
6 i! e5 J6 J9 a: D5 d  c
# F" ^/ A9 j$ L9 y1 R- Y% j
/*此区间内,如果出现函数仅申明,但是没有被调用时,编译不产生warning*/ void ' h4 E  [, w, A
MyTestFunction(void)
$ b$ Q* \  N! }% U2 V9 q, n{…}
8 [. f  |( r1 m( u$ B* j#pragma GCC diagnostic pop
' S+ Z( b1 a2 C
+ g" [3 Q% n+ c" u, j) S) @; N因为我们配置了“-Wunused-function”,那么在编译时,即使 MyTestFunction 没有 被调用,编译也不产生 warning。9 p( K7 e" ^$ ~& z  b
( p& [( M0 `$ ~' [: _9 A
我们还可以在 STM32CubeIDE 中,通过“Help”->“Information Center”->“Read STM32CubeIDE Documentation”->“C/C++ Compiler”,找到 GCC 编译器文档,从而发现更多的 warning 选项,根据需要主动屏蔽更多的 warning。见图 3 :/ S! P% A* {8 |. o  X
$ ?+ G) Z4 r3 t  j; P
微信图片_20230629222058.png 8 g% c5 R: F9 |- K0 f; p8 Y* Z

" [. Y0 A* ?- f8 s. j1 S3 A3. 小结
  P7 a( C7 T4 {" v7 N* q* X事实上,在编译项目时,warning 和 error 同样重要,部分隐蔽的问题可能就和 warning 相关。当我们对工程代码和编译器有了更深层次的了解后,可以巧妙地使用和屏蔽 warning,帮我们更好地管理项目。1 e; d+ Q. n7 z4 Q! n% N

6 y1 _1 a% d( _# t" t

) K" V& S& |. O9 Z
7 g; B* y* G# ]% [( F0 V8 s
收藏 评论0 发布时间:2023-6-29 22:21

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版