请遵守好的编程风格 -- 关于.h文件去写函数的具体实现

今天往工程里添加Log.h和Log.cpp这用来打印log的文件时, 编译报错误. 

Log.cpp里的一些函数调用func1(), func2(), funcXXX()找不到实现, 可是那些函数明明在公共的接口库xxx.h和xxx.cpp里有声明和实现啊, 函数包含也没有问题.

问题排查 --> xxx.h里的函数声明都是static的, 很奇怪, 经对比, 只是我这个项目里这样, 其它项目里的这个公共接口库xxx.h里的函数声明并非static, 看来是之前维护这套代码的某猿给统一加上的.

--> 可是你作为函数库, 声明为static, 就被限制为了文件内使用, 别人怎么调用啊. 于是把func1()在xxx.h声明中的static去掉, make clean, 再make, 果然该错误解决了.

--> 于是爽快地把文件中所有static全都去掉重新编译. 竟然又报错!!! 一大堆函数重复定义, 去xxx.h里查看, 函数头里也有#ifdef #define #endif这控制头文件重复包含的东西.

--> 仔细查看提示重复定义的函数func3(), 发现它的实现直接写在了xxx.h里(其他大部分函数都比较规范, .h里写声明, cpp文件里写实现. 这个函数是后被加进来的), 而xxx.cpp里原来有它的实现, 被注释掉了.  仔细查看那些错误, 发现这些提示重复定义的, 全都是实现直接写在了.h里.

--> 于是把func3()的定义拿到了cpp里, .h里只是声明. 再编译, 果然编译无错了.


赤裸裸的不遵守良好编程风格的造成的恶果...


该问题是如何产生的? 我猜想是这样的:

--> 某猿向该函数库xxx.h添加新的函数接口func5, 由于不好的编程习惯, func5的实现直接写在了.h里

--> 编译遇到错误, 提示func5()被重复定义, 于是在.h中为func5()加以static关键字修饰, 这样不管xx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值