MDK warning: #231-D: declaration is not visible outside of function
发布日期:2021-06-30 22:01:53
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月11日 22时48分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux 查看文件夹权限
2019-04-30
linux tar 备份
2019-04-30
ubuntu中配置任意应用的快捷键
2019-04-30
ln 命令 硬链接
2019-04-30
使用鼠标中键在vim下赋值文本到其它编辑器
2019-04-30
chkconfig使用和级别介绍
2019-04-30
snort 笔记1 ----- 3种模式简介
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30
ubuntu tar备份
2019-04-30
My notes about backup to ubuntu
2019-04-30
linux 查看分区和文件大小
2019-04-30
IP TCP UDP 结构
2019-04-30
Not using PCAP_FRAMES 解释(snort中)
2019-04-30
数字信号处理——FIR滤波器设计
2019-04-30
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Ubuntu 14.04 安装TM2009/QQ
2019-04-30
Ubuntu 14.04 安装VMware
2019-04-30
如何解决Linux下USB设备节点名不固定问题
2019-04-30