写代码的时候太随便了,最近在自己的代码中发现了一个有趣的bug。 虽然代码中有只写了一半的语句,但是编译器没有警告就这样没有放过。
为了说明问题,简单再现当时问题的演示代码如下。
1 #include 'stdio.h '
2
3 int a;
4 int b;
5
6输入主(语音)
7 {
8 a=
9 b=123;
10打印TF (a=% d (n ),a );
11打印TF (b=% d (n ),a );
12
13返回0;
14 }
15
编译结果:
grey demac-mini : exp _ 29 grey Zhang $ gcc exp _ 29.c
grey demac-mini : exp _ 29 grey Zhang $./a.out
a=123
b=123
虽然您可能会发现运行的结果出了什么问题,但编译器一定是将别人的一行代码分解成两行写的。 即使如此,在过去多年的工作中,这种连续赋值的使用方法是禁忌的。 现在不知道这个能不能用。 修改代码以验证自己的想法:
1 #include 'stdio.h '
2
3 int a;
4 int b;
5
6输入主(语音)
7 {
8 a=b=123;
9printf(a=%d(n ),a );
10printf(b=%d(n ),a );
11
12返回0;
13 }
14
编译结果:
grey demac-mini : exp _ 29 grey Zhang $ gcc exp _ 29.c
grey demac-mini : exp _ 29 grey Zhang $./a.out
a=123
b=123
从执行结果来看,这两种方式是等效的。
其实,这个换行的使用方法,在后来自己学习能力提高的过程中遇到过。 但是,通常情况下,不使用续航符号换行是在函数宣言的时候,所以接触的情况非常少。 出于软件的安全性,我个人支持换行符必须使用换行符。 简单的符号避免了许多问题,简化了软件调试的难度,使软件易于维护。 即使是现在,从语法和编译器的角度来支持这个自由的换行,从个人的编码方式上也应该注意。
这么说来,这种风格让我想到了多年前我依靠的编程语言Perl。 关于Perl的使用,那真的得换个话题了。