|
前些天买了块 SSD 顺便给电脑重装了系统,当然也免不了要重新搭建开发环境。以前俺在嵌入式开发方面基本就是 STM32 ,开发工具主要用 VS Code 加 Keil MDK 的组合。这次决定做些改变,换成了 WSL2 下面的 GCC + CMAKE,编辑器依旧用 VS Code。
环境搭好之后做的第一个小测试就翻车了,用 STM32CubeMX 生成了一个 CMAKE 项目,编译时出现了 "empty translation unit" 警告!
- /home/.../STM32G0xx_HAL_Driver/Src/stm32g0xx_ll_rcc.c:1391: warning: ISO C forbids an empty translation unit [-Wpedantic]
复制代码
出现这个警告的原因是高版本的 GCC 的检查更严格,所谓的 "empty translation unit" 就是指一个源文件中没有任何注释之外的代码。解决的办法很简单,加一些没用的代码进去就行了。
本着内事不决问 AI、外事不决也问 AI 的精神,俺就在 VS Code 中问 Copilot 该怎么消除这个警告,它的回答也很简单,加一个啥也不干的 dummy_fuction 函数:
- // Add a dummy function to avoid empty translation unit warning
- void dummy_function(void) {}
复制代码
看了 AI 的答案,俺不由得露出了得意的笑容,你小子还是嫩啊!当即反问它如果有多个文件的话,搞一堆 dummy_function 不会冲突吗?难道要一个个分别取不同的名字吗?那岂不是很麻烦!
AI 赶紧承认自己考虑不周了,不过解决方法也很简单,把 dummy_function 改成静态函数就可以了。
- // Add a dummy function to avoid empty translation unit warning
- static void dummy_function(void) {}
复制代码
认错态度还是很诚恳地,这小子孺子可教啊,那就试试这个方法吧。
不试不知道、一试吓一跳,走了旧警告,迎来新警告!
- /home/.../stm32g0xx_ll_rcc.c:1388:13: warning: 'dummy_function' defined but not used [-Wunused-function]
复制代码
俺把新问题丢给 AI,看看吧你干的好事!AI 说对不起是我大意了,你看看这个代码行不行:
- #if defined(__GNUC__) && !defined(__clang__)
- __attribute__((unused)) static void dummy_function(void) {}
- #else
- static void dummy_function(void) {}
- #endif
复制代码
我靠,这小子有两把刷子啊,不仅解决了新警告的问题,而且还很贴心地搞了很大一坨来适应不同的编译器,算是及格了
通过这一番较量,俺赶脚目前的 AI 编程还只能打打辅助,或者帮初学者解决一些入门问题,真想要替代码农还有很长的路要走。
最后,俺还是没有采用 AI 给出的方案,自己写了个更简洁的:
- // Add a weak dummy function to avoid empty translation unit warning [-Wpedantic]
- void __attribute__((weak)) dummy_function(void) {}
复制代码
|
|