有人见过C语言这种用法吗

[复制链接]
1750|22
 楼主| shipeng1989 发表于 2020-11-2 16:28 | 显示全部楼层 |阅读模式
本帖最后由 shipeng1989 于 2020-11-16 09:19 编辑

if(表达式)语句1,语句2,语句3;经过微软VS验证运行结果等效于if(表达式){语句1;语句2;语句3;}。我是在看别人写的代码时发现的这种用法,一开始看到它我是崩溃的,一度怀疑这些年我是不是学的假C语言。因为我记得C语言语法里面明确说过语句只能用 ';' 号结束,除此之外的任何符号作为语句的结束符都是不被允许的。但是偏偏就有人能反其道而行之还能堵住编译器的嘴不让它跳出来瞎逼逼,难道这个人是造物主或是开了挂的存在???冷静下来一想其实C语言里面有一个叫逗号运算符的东东,一直都觉得这个知识点不重要或者用不上所以都直接跳过了,万万没想到今天终于付出了不算惨痛的代价,所以说我的感觉还是很准的不重要的他永远都不重要关键时候要不了你的命


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评论

有点类似换行符,意思就是一句话还没说完  发表于 2020-11-3 09:07
分号表示语句结束,逗号表示语句还没结束。把三个短句合并成一个长句,只有语法对也没什么问题啊。  发表于 2020-11-3 05:50
可以这么用,但这段代码有点不人道  发表于 2020-11-2 16:50
LcwSwust 发表于 2020-11-2 16:38 | 显示全部楼层
逗号,常用于定义变量,遇到分号才结束.
coody 发表于 2020-11-2 18:02 | 显示全部楼层
逗号运算符,我经常用于单片的代码,当胆码简单时,常用。比如:
if(i == 1)  a=0, b=0, c=0;
Loongson2012 发表于 2020-11-2 22:41 | 显示全部楼层
传说中的逗号表达式?
sq0101 发表于 2020-11-2 23:05 | 显示全部楼层
人家写的没错啊,只是你的c语言基本功问题,只是逗号表达式而已,不过一般不这么写就是了。
nuaabob 发表于 2020-11-3 00:11 | 显示全部楼层
逗号运算符,可以这么写的,比如你在switch开关语句里面,分支语句如果有多条就可以考虑这种形式,只是不常见罢了。
ayb_ice 发表于 2020-11-3 08:29 | 显示全部楼层
逗号运算符而已
hobbye501 发表于 2020-11-3 09:09 | 显示全部楼层
嗯 毕竟有时候一句话,表达不完全,需要逗号这种表达方式  就像FOR循环里医院 for(i=0;i>5;i++)这种类似吧
elife 发表于 2020-11-3 11:28 | 显示全部楼层
这个写法,马大哈的人会迷惑在这里。对编译器语法处理熟悉程度,确实能帮助提高写程序的时间。不过这种格式还是不太提倡。毕竟写程序只占整个程序编写的一小部分,另外别人看程序的时候,容易引起误解。另外还有靠运算符优先级的写法,不如直接用括号和分多句描述好。格式大众化是最好的方式。
xyz549040622 发表于 2020-11-3 22:17 | 显示全部楼层
反正这种奇技淫巧我坚决不用,可读性和可理解性太差。
duguwuyun1985 发表于 2020-11-4 10:14 | 显示全部楼层
是标准的C语言啊,只是一般很少这样用而已
GavinZ 发表于 2020-11-4 10:39 | 显示全部楼层
本帖最后由 GavinZ 于 2020-11-4 10:53 编辑

没看出这么写的好处,坏处就是:一对儿{}就能一目了然地解决的事,非得让人费劲儿数逗号阅读。
GavinZ 发表于 2020-11-4 10:44 | 显示全部楼层
如果这样做都值得,那大家都别回车换行了,密密麻麻的写上一整段,反正编译器也能理解。
爱情海玩偶 发表于 2020-11-4 11:25 | 显示全部楼层
是不是可以加个\来表示一句话没说完
叶春勇 发表于 2020-11-4 12:37 | 显示全部楼层

看你这么一说,我看了ansi C语言的if语句的语法。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
叶春勇 发表于 2020-11-4 12:41 | 显示全部楼层
  1. argument_expression_list
  2.         : assignment_expression
  3.         | argument_expression_list ',' assignment_expression
  4.         ;

  5. expression
  6.         : assignment_expression
  7.         | expression ',' assignment_expression
  8.         ;
  9.        
  10. init_declarator_list
  11.         : init_declarator
  12.         | init_declarator_list ',' init_declarator
  13.         ;
  14.        
  15. struct_declarator_list
  16.         : struct_declarator
  17.         | struct_declarator_list ',' struct_declarator
  18.         ;


  19. enumerator_list
  20.         : enumerator
  21.         | enumerator_list ',' enumerator
  22.         ;
  23.        
  24. parameter_type_list
  25.         : parameter_list
  26.         | parameter_list ',' ELLIPSIS
  27.         ;

  28. identifier_list
  29.         : IDENTIFIER
  30.         | identifier_list ',' IDENTIFIER
  31.         ;


  32. initializer
  33.         : assignment_expression
  34.         | '{' initializer_list '}'
  35.         | '{' initializer_list ',' '}'
  36.         ;

  37. argument_expression_list
  38.         : assignment_expression
  39.         | argument_expression_list ',' assignment_expression
  40.         ;
  41.        
  42.        
huang1007 发表于 2020-11-4 13:46 | 显示全部楼层
建议打死这么写的人
William1994 发表于 2020-11-5 08:43 | 显示全部楼层
词法分析和语法分析,主要是  关键字KEYWORD、标识符IDENTIFIER、 运算符OPERATOR、表达式EXPRESSION、语句STATEMENT。
这是程序设计语言的三个部分。

逗号是运算符,逗号和前后的内容组成表达式,表达式和分号组成语句。
没有逗号表达式一说,也没有加法表达式一说,只有加法运算符。

以前经常见supper  PI等源代码中   for(i=0,j=0;  j=i+1 , j>6 ; i++, j++)
括号里面两个逗号分成三段。
那么中间的 j=i+1 , j>6  这句,逗号前面的计算后扔了,最后的j>6是for的中间部分的计算结果。



还经常见老外的代码里面用while-do 语句转表达式的。  一般表达式加个分号可以变成语句,语句要变表达式就有点麻烦了。
james03 发表于 2020-11-13 14:09 | 显示全部楼层
逗号表达式
lu50211 发表于 2020-11-13 17:55 | 显示全部楼层
用这种写法的人不是在坑队友,就是在坑自己。  等若干月后再修改程序时,自己会骂自己傻,BB.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

140

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部