MDK warning: #231-D: declaration is not visible outside of function
发布日期:2021-06-30 22:01:53
浏览次数:3
分类:技术文章
本文共 963 字,大约阅读时间需要 3 分钟。
前言
在MDK中写着写着,编译就出了一个警告:
..\x.h(24): warning: #231-D: declaration is not visible outside of function
大概意思是,这个数据类型已经在其他地方定义了,但是在当前实现中不可见。
问题代码为
bool (*cbproc_device_id_ctrl)(TAG_DEV_CMD_DG_NODE* pinfo, int* pi_port, int* pindex, char* buf_to_send, int* pi_send_cnt);
出问题的参数类型为 TAG_DEV_CMD_DG_NODE
我能确认头文件已经include了。最后调整了半个小时,才知道,是头文件重复包含引起的(本头文件为a.h, TAG_DEV_CMD_DG_NODE所在的头文件为b.h, 还有其他依赖的头文件为x.h. a.h include b.h, b.h include a.h, x.h和a.h, b.h之间也有相互的include)。反正当前工程的头文件include比较随意.
虽然每个头文件都有交叉编译宏来防止重复包含头文件引起的编译错误。
但是这个警告应该和编译器有关系,不是代码写错了。最后,只在头文件中包含必须的依赖头文件。这个警告没了,全部编译过。
总结:
- 头文件中的交叉编译宏一定要加。
- 即使有交叉编译宏,也不要随便的在每个头文件中include其他不必要的头文件。 .h头文件中只include必要的头文件 .c中可以随便include头文件 如果真的是公用的头文件,请保持公用头文件中的最小化include其他依赖的头文件。 不能为了代码写的方便,就随便向公用头文件中include其他无关的头文件.
- 不要为了节省一个.h, 就往需要用函数A的头文件中写入 extern void fn_a(). 而是应该在fn_a()实现的配套fn.h中声明fn_a(), 然后包含fn.h
- 在#pragma pack(push, 1)和#pragma pack(pop)之间,只写结构的定义。不要将枚举值定义,外部函数声明等和结构体内存对齐有关的内容写进去。
- 编译器没有那么聪明。如果编码风格规范,可以防止出现奇怪的编译错误或警告。
转载地址:https://lostspeed.blog.csdn.net/article/details/103552167 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月20日 11时59分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
AGV自动导引运输车
2019-04-30
Trie树(字典树)
2019-04-30
COMP7404 Machine Learing——KNN
2019-04-30
COMP7404 Machine Learing——SVM
2019-04-30
COMP7404 Machine Learing——ROC
2019-04-30
Python量子计算qiskit
2019-04-30
Python的多线程不是真的多线程(GIL全局解释器锁)
2019-04-30
Python手动读取MNIST数据集
2019-04-30
Python手动读取CIFAR-10数据集
2019-04-30
Pytorch(十一) —— 分布式(多GPU)训练
2019-04-30
Deeplab v3
2019-04-30
tensor/矩阵/图片等更换通道,调整size
2019-04-30
本地和colab 中 改变tensorflow的版本
2019-04-30
CUB-200鸟类数据集
2019-04-30