函数隐式声明的危害及处理(C语言)

1.为什么要将函数隐式声明提升为编译错误

请看这个编译警告:

[ 71%] Building C object main/CMakeFiles/shake.dir/pjt_helper.c.o
/home/fengxh/shake_src/data_dispatch/main/pjt_helper.c: In function ‘SysMqtt_GetStateJsonPayload’:
/home/fengxh/shake_src/data_dispatch/main/pjt_helper.c:94:5: warning: implicit declaration of function ‘mqttStateToJson_needJsonDelete’ [-Wimplicit-function-declaration]
     cJSON *jsonToBeDeleted = mqttStateToJson_needJsonDelete(&gSensorData.otherFrames.payloadStateObj);

 这个警告在相应的头文件未包含时会爆发,但是如果不处理,会有异常情况出现,极难调试。比如这个函数本身是要返回一个指针(cJSON*),因为缺省声明的默认返回参数是int32。所以会造成64位的地址指针被截断,然后会是一个segment fault.

我大概耗费了3个小时,在这个编译错误上。

2.如何将特定的编译警告提升为编译错误

将特定的编译警告提升为错误的方法:

如果是单独命令行编译:

CFLAGS=-Werror=implicit-function-declaration

如果是cmake环境,把下面的参数加入CMakeLists.txt

add_compile_options(-Werror=implicit-function-declaration)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子正

thanks, bro...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值