C语言换行带来的问题
写代码的时候太随意,近期在自己的代码中发现一个有意思的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语言换行带来的问题相关推荐
- c语言换行编辑,C语言怎么换行
C语言换行的方法:首先打开代码编辑器:然后每个在输出语句的句末加上[\r\n]即可,代码为[printf("打个字符试试:\r\n")]. C语言换行的方法: 1.举个栗子# in ...
- 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 ...
- c语言换行(c语言换行是什么意思)
什么是C语言 C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I ...
- c语言换行符不起作用,回车符与换行符问题——C语言
回车符(carriage return,'\r')与换行符 (line feed,'\n') 换行对应的ASCII码值是10,回车符对应的ASCII码值是13,需要注意的是用户按下回车键时,对于不同的 ...
- c语言宏定义字符串 换行_C语言换行
(一) 这几天正在看 ATMEL 的 ARM 处理器 AT91SAM7X256 ,在其官方的头文件中发现有如下宏定义: #define SPI0_PINS (AT91C_PA17_SPI0_MOSI ...
- html语言换行格式,html换行符br标签
br标签的作用 在 html 源代码中对内容进行编辑,如果直接采用回车换行,那么浏览器解析的结果可能会是一个空格.或者被忽略,正确的做法是使用< br / >标签,在 html 语言中,b ...
- html语言换行符,html换行符
在html源代码中对内容进行编辑,如果直接采用回车换行,那么浏览器解析的结果可能会是一个空格.或者被忽略,正确的做法是使用 标签,在html语言中,br标签定义为一个换行符,所以应将它理解为简单的输入 ...
- 常用c语言小程序,c语言经典小程序汇总大全
网上有很多的人说编程有多么多么无聊,其实:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好.坚持下来,你会发现编程的乐趣的.当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果,南无果断放弃未 ...
- c语言中time函数作用,C语言中时间的基本用法小结
前言 在我学的这些编程语言中,总是记不住它们的时间处理方式,每次用到时都要重新看,所以想着在这里记录下来,也方便用到时查找,也方便有需要的朋友们参考. time_t和struct tm 在C语言中用t ...
最新文章
- 伪元素first-letter
- linux shell字符串及字符串长度获取方式
- Java和OC的区别
- 2011年三八妇女节搜索引擎LOGO设计欣赏
- 想学AI开发很简单:只要你会复制粘贴
- Android Studio3.2经常用的一些依赖(以后再加)
- java泛型为伪泛型,什么,JAVA的泛型是伪泛型
- qvodplayer.hta:按个人使用习惯自写易用的整合搜索资源的p2p电影搜索/播放程序(能自动升级)
- 计算机发展史评课议课稿,评课稿模板5篇
- Transformations in signals and systems DSP
- 安卓手机更新过程手机乱码_关于安卓手机上自带播放器乱码问题的解决
- javaSE基础大全--知识点总结
- 【教案】心田花开:如何辅导一年级孩子看图写话
- 淡水鱼生鱼片含有大量肝吸虫 可寄生于肝脏内30年
- 人工智能TensorFlow进行车辆检测车辆识别
- 3D简单壳体CAD绘制
- 计算方法/数值分析牛顿下山法C/C++实现方法
- vue ie报错:SCRIPT5022: [vuex] vuex requires a Promise polyfill in this browser.
- 10_Mysql查询
- 7月7日易用性SIG技术分享活动精彩回顾
热门文章
- 数据结构之树结构详解
- python: super
- 【网络技术】什么是CIDR
- java计算机毕业设计绿色农产品推广应用网站源代码+数据库+系统+lw文档
- IOT-DC3配置指南
- 小白必知必会的几个IP地址知识
- SpaceVim使用
- oracle 查询列合并行,Oracle 查询合并列
- 使用redis 报错Address already in use redis无法启动问题 oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
- 锌离子掺杂介孔二氧化钛空心微球/银离子/阴离子/阳离子/锆离子修饰二氧化硅微球制备与性能