写代码的时候太随意,近期在自己的代码中发现一个有意思的Bug。代码中有一个只写了一半的语句,但是编译器却一点警告也没有直接放过了。

为了说明问题,简单复现当时问题的示范代码如下:

1 #include "stdio.h"

2

3 int a;

4 int b;

5

6 int main(void)

7 {

8     a =

9     b = 123;

10     printf("a = %d\n",a);

11     printf("b = %d\n",a);

12

13     return 0;

14 }

15

编译运行的结果:

GreydeMac-mini:exp_29 greyzhang$ gcc exp_29.c

GreydeMac-mini:exp_29 greyzhang$ ./a.out

a = 123

b = 123

看一下执行的结果似乎就知道是什么问题了,肯定是编译器是别人一行代码拆成了两行来写了。即使是这样,在过去的这么多年工作中,这种连续赋值的用法是很忌讳使用的。以至于现在我都不知道这个是否可以用。为了验证自己的想法,把代码修改一下:

1 #include "stdio.h"

2

3 int a;

4 int b;

5

6 int main(void)

7 {

8     a = b = 123;

9     printf("a = %d\n",a);

10     printf("b = %d\n",a);

11

12     return 0;

13 }

14

编译运行的结果:

GreydeMac-mini:exp_29 greyzhang$ gcc exp_29.c

GreydeMac-mini:exp_29 greyzhang$ ./a.out

a = 123

b = 123

从执行结果上看,这两种方式是等价的。

其实,这种换行的用法在后来自己进行能力提升学习的过程中是遇到过的。但是,通常这种换行而不使用续航符号的时候都是在函数声明的时候,因此接触到的是十分少的。从软件的安全性考虑,我个人是比较支持换行必须使用续航符号的。简单的一个符号能够避免不少问题,还能够简化软件的调试难度,让软件更容易维护。即使现在,从语法或者编译器的角度支持这种自由的换行,从个人编码风格上也应该注意这一点。

说起来,这种风格还是让我想到了多年前我十分依赖的编程语言Perl的。至于Perl的使用,那真得另说了。

C语言换行带来的问题相关推荐

  1. c语言换行编辑,C语言怎么换行

    C语言换行的方法:首先打开代码编辑器:然后每个在输出语句的句末加上[\r\n]即可,代码为[printf("打个字符试试:\r\n")]. C语言换行的方法: 1.举个栗子# in ...

  2. stm32中c语言换行符error——expect a declaration warning——“\“followed by white space is not a line splic

    标题 stm32中c语言换行符error--expect a declaration warning--""followed by white space is not a lin ...

  3. c语言换行(c语言换行是什么意思)

    什么是C语言 C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I ...

  4. c语言换行符不起作用,回车符与换行符问题——C语言

    回车符(carriage return,'\r')与换行符 (line feed,'\n') 换行对应的ASCII码值是10,回车符对应的ASCII码值是13,需要注意的是用户按下回车键时,对于不同的 ...

  5. c语言宏定义字符串 换行_C语言换行

    (一) 这几天正在看 ATMEL 的 ARM 处理器 AT91SAM7X256 ,在其官方的头文件中发现有如下宏定义: #define SPI0_PINS (AT91C_PA17_SPI0_MOSI ...

  6. html语言换行格式,html换行符br标签

    br标签的作用 在 html 源代码中对内容进行编辑,如果直接采用回车换行,那么浏览器解析的结果可能会是一个空格.或者被忽略,正确的做法是使用< br / >标签,在 html 语言中,b ...

  7. html语言换行符,html换行符

    在html源代码中对内容进行编辑,如果直接采用回车换行,那么浏览器解析的结果可能会是一个空格.或者被忽略,正确的做法是使用 标签,在html语言中,br标签定义为一个换行符,所以应将它理解为简单的输入 ...

  8. 常用c语言小程序,c语言经典小程序汇总大全

    网上有很多的人说编程有多么多么无聊,其实:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好.坚持下来,你会发现编程的乐趣的.当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果,南无果断放弃未 ...

  9. c语言中time函数作用,C语言中时间的基本用法小结

    前言 在我学的这些编程语言中,总是记不住它们的时间处理方式,每次用到时都要重新看,所以想着在这里记录下来,也方便用到时查找,也方便有需要的朋友们参考. time_t和struct tm 在C语言中用t ...

最新文章

  1. 伪元素first-letter
  2. linux shell字符串及字符串长度获取方式
  3. Java和OC的区别
  4. 2011年三八妇女节搜索引擎LOGO设计欣赏
  5. 想学AI开发很简单:只要你会复制粘贴
  6. Android Studio3.2经常用的一些依赖(以后再加)
  7. java泛型为伪泛型,什么,JAVA的泛型是伪泛型
  8. qvodplayer.hta:按个人使用习惯自写易用的整合搜索资源的p2p电影搜索/播放程序(能自动升级)
  9. 计算机发展史评课议课稿,评课稿模板5篇
  10. Transformations in signals and systems DSP
  11. 安卓手机更新过程手机乱码_关于安卓手机上自带播放器乱码问题的解决
  12. javaSE基础大全--知识点总结
  13. 【教案】心田花开:如何辅导一年级孩子看图写话
  14. 淡水鱼生鱼片含有大量肝吸虫 可寄生于肝脏内30年
  15. 人工智能TensorFlow进行车辆检测车辆识别
  16. 3D简单壳体CAD绘制
  17. 计算方法/数值分析牛顿下山法C/C++实现方法
  18. vue ie报错:SCRIPT5022: [vuex] vuex requires a Promise polyfill in this browser.
  19. 10_Mysql查询
  20. 7月7日易用性SIG技术分享活动精彩回顾

热门文章

  1. 数据结构之树结构详解
  2. python: super
  3. 【网络技术】什么是CIDR
  4. java计算机毕业设计绿色农产品推广应用网站源代码+数据库+系统+lw文档
  5. IOT-DC3配置指南
  6. 小白必知必会的几个IP地址知识
  7. SpaceVim使用
  8. oracle 查询列合并行,Oracle 查询合并列
  9. 使用redis 报错Address already in use redis无法启动问题 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  10. 锌离子掺杂介孔二氧化钛空心微球/银离子/阴离子/阳离子/锆离子修饰二氧化硅微球制备与性能