c语言中绝对值怎么表示:当初自己乱写表达式调试半天

c语言中绝对值怎么表示:当初自己乱写表达式调试半天

敲代码写到一半卡在取负数结果这里,才慌慌张张去查c语言中绝对值怎么表示,那会脑子里乱糟糟的,以为直接写个if判断正负就能糊弄过去,完全没考虑头文件那档子事。编译器不停报警告,运行出来的数字忽大忽小,盯着黑框看了快二十分钟,越改越乱,旁边一起学的同学还凑过来看,问我是不是变量类型搞错了。

最开始想省事,自己手写一段判断逻辑,小于零就乘负一,大于等于零直接返回原值。写好之后跑正数没问题,一碰到负数,偶尔能出对的值,偶尔又跑出一串莫名其妙的大数,那时候分不清是溢出的问题,还是自己判断条件写漏了边界。反复改括号,调换等于号的位置,控制台里的输出依旧没有稳定下来,心里憋着一股烦躁,明明逻辑看着没啥毛病,结果就是不对。

后来才反应过来,有现成的函数可以拿来用。第一次敲abs的时候,忘了加上对应的头文件,编译倒是勉强过了,可运行的时候行为特别奇怪,不同测试用例出来的结果完全没有规律。那时候分不清abs和fabs,随手抓一个就往代码里塞,拿浮点数字去试abs,屏幕上直接蹦出来截断之后的整数,愣了好久才意识到两个函数管的类型根本不一样。

同一个程序里混着整型和小数,来回切换函数,一会abs一会fabs,经常搞混。

有一次写计算距离的小段代码,里面存的是double类型的数据,下意识继续用abs,调试的时候差了零点几,找了好久才定位到这里。本来以为只是名字差一个字母而已,没想到底层处理完全不是一回事,整型交给abs,浮点型要用fabs,这个区别是在一次次调试报错里慢慢记下来的,不是谁一次性讲清楚的。

还有一次看到别人写的代码,直接自己封装了一个取绝对值的宏,看着简洁,我试着抄到自己的文件里,没留意宏替换的坑,表达式传进去之后,运算优先级乱掉,结果直接跑偏。那段时间来回折腾,一会手写判断,一会用宏,一会调用库函数,没有固定的习惯,想到哪个就用哪个,踩过好几个不一样的坑。

慢慢摸下来,也只是摸清了自己写代码时的习惯,整数的场景我大多直接调用abs,带上头文件,小数就换成fabs。但我不敢笃定所有场景都合适,不同的编译器、不同的数据范围,好像偶尔还是会冒出奇怪的情况,我自己碰到过超出int范围之后,abs返回值异常的情况,那时候才知道这个函数也有它能处理的上限,不是丢进去任意数字都能稳稳算出结果。

之后再碰到要取绝对值的地方,不会上来就盲目写判断语句了,先扫一眼变量是什么类型。只是这个习惯是一次次调试堆出来的,不是书本上一句话就能记牢的东西。有时候写代码赶进度,还是会犯老毛病,忘记引入头文件,等编译器提示或者输出结果不对,才回头补上那一行。

关掉编译器的时候屏幕还留着刚才的测试代码,不想再反复测那几组数字了。