VectorLu

一些代码踩坑的总结

每个人在写代码时,都不可避免犯一些错误,而且往往会在上面花费不少时间,发现错误之后有时甚至觉得这简直智障。为了避免重复犯错,我将自己所犯过的错误记录下来,与读者(包括未来的自己)分享,希望能有所帮助。

2016

Dec.

Day 12

不要在条件表达式中滥用自增自减符号

不要在如下的条件表达式(一般为逻辑表达式或关系表达式)中滥用 ++--,在判断的时候自增自减有时候会造成隐蔽的错误,特别是对于一些全部变量和有多个 else if 的情况。

1
2
3
4
5
6
if (Expression1)
{...}
else if (Expression2)
{...}
...
else

指向数组最顶端的索引

由于数组开始的索引是 0,往数组中填入值,希望最新放入的元素索引能够正确,如下是一种不太好但是正确的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sum = 0;
key = 0;
is_const = NULL;
token_xy.x = 0;
token_xy.y = NULL;
p_token_xy = &token_xy;
printf("Please input string:\n");
do
{
ch = getchar();
program[sum++] = ch;
}while(ch != '#');
sum--;
这种实现有点啰嗦,虽然 `sum` 的确表示元素总数,但是为了以下的一些操作,`sum--;`,这样就有点尴尬。直接一开始让 `sum = -1;`,注释掉 `sum--;`,然后 `(╯°□°)╯︵ ┻━┻`,程序就出错了。 原因是数组的索引一开始就为 `-1` 了,`program[-1] = ch;` 导致了错误。应该改为 `program[++sum] = ch;` 。

Day 18

在 C 语言这样变量作用域十分麻烦的语言中,注意:在给函数的形式参数命名时,不要和全局变量重名。如果重名,当该函数希望修改全局变量时,

您的支持将鼓励我继续创作!

热评文章