原创

C中括号优先级的思考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ostrichmyself/article/details/5353271

问题源于论坛的一道题目:

 

http://topic.csdn.net/u/20100216/21/ec98464e-a47e-4263-bb1c-a001e130ba87.html

 

下面是问题:

 

 

问题的焦点也落在printf执行的问题上,到底先执行谁,后执行谁, 还有部分有才青年将该问题中庸化,觉得跟编译器有关。

 

执行的顺序真的跟编译器有关吗? 后面再讨论这个问题。

 

printf执行的问题, 完全可以归结函数执行顺序的通用问题, 所以,用例子来将该问题抽象化:

 

 

 

执行的结果是:

right
left

 

从中可以看出来, 括号中(理解为函数即可), 执行的顺序是先从右边,再从左边。

 

现在,再考虑编译器的影响, 我们说的编译器不是你自家开发的编译器, 这个世界上总有些BT的机构, 可能也会开发一个编译器,可能也搞些非常BT的功能(类似于咱移动喜欢将别人好好的WIFI给阉割了), 我们不讨论BT的个案。

 

ANSI C的标准中,一条不成文的规定是, 目标参数往往作为第一个参数, 类似于strcpy(dst, src). 这个规定,主流的编译器都认同这样一条规则, 在操纵目标之前, 必定先要将源好好处理一把, 所以, 函数中,也就是括号中,确定的优先级,是从最右边,也就是从src源开始处理,处理完后,再进一步处理dst的。

 

这样的设计,既符合ANSI C的约定, 也符合处理常识。

 

如果真的有编译器不按照这条路走的, 崩溃的不是程序,而是Coder.

文章最后发布于: 2010-03-07 09:33:00
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览