C中括号优先级的思考

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

 

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值