一:事情起因
事情的起因是这样的:原来的产品已经有比较成熟代码,并且产品已经批量。客户提出了新的功能改动,需要将其中一个端口的功能与另一个端口互换,原来做ai采集的端口用作开关量采集,原来用作开关量采集的端口用作ai采集。
这么小的代码改动,想着让新来的小伙子尝试一下,就放心地让他去改。2天后询问进度,本来以为已经完成的工作,竟然被告知代码测试还有问题。
抽出来时间跟他一起检查了代码。当我看到下面的改动之后,瞬间崩溃了。
原来的代码是这样的:
gpio_inittypedef gpio_initstructure;gpio_initstructure.gpio_pin = gpio_pin_9;gpio_initstructure.gpio_mode = gpio_mode_ain; gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpioa, &gpio_initstructure);gpio_initstructure.gpio_pin = gpio_pin_10;gpio_initstructure.gpio_mode = gpio_mode_ipd;gpio_init(gpioa, &gpio_initstructure);改动后的代码是这样的:gpio_inittypedef gpio_initstructure;gpio_initstructure.gpio_pin = gpio_pin_9;//gpio_initstructure.gpio_mode = gpio_mode_ain; gpio_initstructure.gpio_mode = gpio_mode_ipd;gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_init(gpioa, &gpio_initstructure);gpio_initstructure.gpio_pin = gpio_pin_10;//gpio_initstructure.gpio_mode = gpio_mode_ipd;gpio_initstructure.gpio_mode = gpio_mode_ain;gpio_init(gpioa, &gpio_initstructure);乍一看好像没有什么问题,将原来pa9的ai模式配置注释掉,修改为上拉输入模式,将原来ai10的上拉输入模式修改为ai模式。
当我将代码用vscode打开后,发现第204行与205行的颜色相同。如下图:
原来是不小心在第204行最后输入了一个“”,这个“”在c语言中是换行标记,使用这个符号时,就导致第205行其实是被注释掉的。相当于pa9的模式一直没有设置成功。
当我问他为什么要在最后增加一个“”的时候,他说:“不知道,不过这个已经被注释了,也不影响啊!”。
我的内心在想,“你是c语言之父啊,你说没影响就没影响了?”。不过作为导师,还是耐着性子给他讲解了“”在c语言中的用法。
二:总结
在c语言程序编写中,我们有时会遇到一行代码太长而影响阅读或者出现与部分公司或组织要求的编码规范不符的情况,此时我们需要将这行代码分成多行来写。
针对一般语句,我们使用结尾作为换行标记。当在编译时,后面的换行符将被忽略,当做一行处理。
所以上面的语句://gpio_initstructure.gpio_mode = gpio_mode_ain; gpio_initstructure.gpio_mode = gpio_mode_ipd;在编译时的实际效果会这样的://gpio_initstructure.gpio_mode = gpio_mode_ain; gpio_initstructure.gpio_mode = gpio_mode_ipd;所以下面一行配置端口为“上拉输入”模式的代码其实是被注释掉,不被编译进去的。
你也遇到过类似的问题吗?
或门符号
陕西航晶微电子有限公司召开产品设计定型鉴定会
IGBT模块的12道封装制程工艺
服务器是什么,有哪些种类
红米7将于3月18日发布 三星新折叠屏专利曝光
C语言程序编写
前置像素低一级,可OPPOR9s为什么比华为Nova2更讨人喜欢
多参数土壤分析仪的用途和特点分别是什么
AMD显存智取技术工作原理
虹膜识别的应用前景情况怎样
机器视觉检测技术在检测产品表面缺陷的应用
高速光耦的应用领域
电力领域专家、学者齐聚蓉城,能源互联网”引领新潮流
WiFi与zigbee的区别优异
2020年智能联网汽车达2.5亿辆 磐仪成功打入无人载具市场
公司希望能在物联网寻求企业四个领域的解决方法
在笔记本电脑中切换LVDS图形
带有饱和处理功能的并行乘加单元设计
360推出新款旗舰扫地机器人产品X90,新升级了超声波避障传感器
Linux下V4L2框架基于SDL库本地USB摄像头监控