吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2226|回复: 9
收起左侧

[求助] C语言允许初始化列表中出现多余的逗号,为什么这种特性是有效的?

[复制链接]
lfyzr939 发表于 2019-11-12 23:18
这是《C陷阱和缺陷》中的一个思考题。
在下小白,在网上答案不太能看懂,还望各位大佬相助。
======================================CSDN上的答案↓
像enum枚举中的条目有可能是根据其它资源来的,而程序员会制作代码生成工具来生成它,所以就允许enum中的多余逗号。像int i = 9,j = 0;这种用法完全可以拆成int i=9;int j=0;因此不会增加代码生成器的负担,所以不支持int i=9,j=0,;

像这种代码,如果用代码生成器去读资源然后写进去,那么每生成一行都需要在末尾加一个逗号来分隔。C允许最后一行有多余的逗号,那就可以不用单独去处理最后一行了,减轻了代码生成器的制作负担,同时因为不用自行删除最后一个逗号,代码生成器的编写也就更不容易出错了。

————————————————
版权声明:本文为CSDN博主「沧海一笑浅悠悠」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qian_youyou/article/details/79783339

image.png
image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
冰雪冬樱250 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| lfyzr939 发表于 2019-11-12 23:23
原题的表述是这样的
clity 发表于 2019-11-12 23:56
我有这么一个猜想,但不知是否可以这么解释。
C语言中,一般的字符串的最后一个字符一般为'\n',那在列表中,一般最后的一个默认值是什么?我记得一般为NULL,这个指针指向系统随机分配的地址,按我这个逻辑,那么最后一个逗号是否存在,不影响最后这一个指针的指向。
如果我这猜想有错,欢迎指正。
冰雪冬樱250 发表于 2019-11-12 23:56
fe1yu 发表于 2019-11-13 00:19
这个CSDN的答案说的比较清楚了吧,数组 枚举 结构之类的有时候不会完全人工初始化比如容量比较大的时候 可能会借助其他代码生成器减少工作量;C语言的这种特性减少了程序员的心智负担。以原书为例:我只需要每个数字后面都有逗号就可以了 不用考虑是否为最后一个元素,减少了特例的出现,可以统一处理
被遗忘Aue 发表于 2019-11-13 00:46
打了这么久代码都没有发现这个问题,感谢楼主。。。c中的
‘,′有两种意思,一种是分隔号,另一种是逗号运算符。逗号运算符就不必多说了,作为分隔号,它跟空格有类似的作用。显然,在问题中系统把最后的逗号判定为分隔号,自然是null了,所以不影响。不知道我这样理解对不对?
花好s月圆 发表于 2019-11-13 07:15
逗号是参数的间隔,分号表示语句的结尾。
 楼主| lfyzr939 发表于 2019-11-13 19:00
clity 发表于 2019-11-12 23:56
我有这么一个猜想,但不知是否可以这么解释。
C语言中,一般的字符串的最后一个字符一般为'\n',那在列表 ...

貌似不是哦,比如int a〔5〕={1,2,3,4,5}
在我的计算机上打印a〔5〕,a〔6〕的返回值都为0
(虽然我无法理解)
 楼主| lfyzr939 发表于 2019-11-13 19:06
感谢各位的回答,我就不一一回复了,5楼回答正解。
类似的,我突然想到了c语言语法的课堂作业中以“sum=  1+2+3+4” 的格式 打印数据。若以“%d+”格式,则最后一个数为“4+”。
虽然我不太了解代码生成器,但是处理情况应该与此类似。
clity 发表于 2019-11-22 05:23
lfyzr939 发表于 2019-11-13 19:00
貌似不是哦,比如int a〔5〕={1,2,3,4,5}
在我的计算机上打印a〔5〕,a〔6〕的返回值都为0
(虽然 ...

数组是从0开始的,你这个赋值到a4而已,a5,a6为0,是正常的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表