打印

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

[复制链接]
1314|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 shipeng1989 于 2020-11-16 09:19 编辑

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


使用特权

评论回复
评论
hobbye501 2020-11-3 09:07 回复TA
有点类似换行符,意思就是一句话还没说完 
chunk 2020-11-3 05:50 回复TA
分号表示语句结束,逗号表示语句还没结束。把三个短句合并成一个长句,只有语法对也没什么问题啊。 
sjnh 2020-11-2 16:50 回复TA
可以这么用,但这段代码有点不人道 

相关帖子

沙发
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 | 只看该作者
传说中的逗号表达式?

使用特权

评论回复
5
sq0101| | 2020-11-2 23:05 | 只看该作者
人家写的没错啊,只是你的c语言基本功问题,只是逗号表达式而已,不过一般不这么写就是了。

使用特权

评论回复
6
nuaabob| | 2020-11-3 00:11 | 只看该作者
逗号运算符,可以这么写的,比如你在switch开关语句里面,分支语句如果有多条就可以考虑这种形式,只是不常见罢了。

使用特权

评论回复
7
ayb_ice| | 2020-11-3 08:29 | 只看该作者
逗号运算符而已

使用特权

评论回复
8
hobbye501| | 2020-11-3 09:09 | 只看该作者
嗯 毕竟有时候一句话,表达不完全,需要逗号这种表达方式  就像FOR循环里医院 for(i=0;i>5;i++)这种类似吧

使用特权

评论回复
9
elife| | 2020-11-3 11:28 | 只看该作者
这个写法,马大哈的人会迷惑在这里。对编译器语法处理熟悉程度,确实能帮助提高写程序的时间。不过这种格式还是不太提倡。毕竟写程序只占整个程序编写的一小部分,另外别人看程序的时候,容易引起误解。另外还有靠运算符优先级的写法,不如直接用括号和分多句描述好。格式大众化是最好的方式。

使用特权

评论回复
10
xyz549040622| | 2020-11-3 22:17 | 只看该作者
反正这种奇技淫巧我坚决不用,可读性和可理解性太差。

使用特权

评论回复
11
duguwuyun1985| | 2020-11-4 10:14 | 只看该作者
是标准的C语言啊,只是一般很少这样用而已

使用特权

评论回复
12
GavinZ| | 2020-11-4 10:39 | 只看该作者
本帖最后由 GavinZ 于 2020-11-4 10:53 编辑

没看出这么写的好处,坏处就是:一对儿{}就能一目了然地解决的事,非得让人费劲儿数逗号阅读。

使用特权

评论回复
13
GavinZ| | 2020-11-4 10:44 | 只看该作者
如果这样做都值得,那大家都别回车换行了,密密麻麻的写上一整段,反正编译器也能理解。

使用特权

评论回复
14
爱情海玩偶| | 2020-11-4 11:25 | 只看该作者
是不是可以加个\来表示一句话没说完

使用特权

评论回复
15
叶春勇| | 2020-11-4 12:37 | 只看该作者

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



使用特权

评论回复
16
叶春勇| | 2020-11-4 12:41 | 只看该作者
argument_expression_list
        : assignment_expression
        | argument_expression_list ',' assignment_expression
        ;

expression
        : assignment_expression
        | expression ',' assignment_expression
        ;
       
init_declarator_list
        : init_declarator
        | init_declarator_list ',' init_declarator
        ;
       
struct_declarator_list
        : struct_declarator
        | struct_declarator_list ',' struct_declarator
        ;


enumerator_list
        : enumerator
        | enumerator_list ',' enumerator
        ;
       
parameter_type_list
        : parameter_list
        | parameter_list ',' ELLIPSIS
        ;

identifier_list
        : IDENTIFIER
        | identifier_list ',' IDENTIFIER
        ;


initializer
        : assignment_expression
        | '{' initializer_list '}'
        | '{' initializer_list ',' '}'
        ;

argument_expression_list
        : assignment_expression
        | argument_expression_list ',' assignment_expression
        ;
       
       

使用特权

评论回复
17
huang1007| | 2020-11-4 13:46 | 只看该作者
建议打死这么写的人

使用特权

评论回复
18
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 语句转表达式的。  一般表达式加个分号可以变成语句,语句要变表达式就有点麻烦了。

使用特权

评论回复
19
james03| | 2020-11-13 14:09 | 只看该作者
逗号表达式

使用特权

评论回复
20
lu50211| | 2020-11-13 17:55 | 只看该作者
用这种写法的人不是在坑队友,就是在坑自己。  等若干月后再修改程序时,自己会骂自己傻,BB.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

134

帖子

1

粉丝