以前面试的时候老有人问  ++i 和 i++ 的问题, 每每心里都在暗暗想…,
1、这俩东西功能不一样。

2、 写代码的时候多放些注意力在别的地方比在这个地方纠结强。
我总认为, 可读性和扩展性好的代码  比 一堆 又烂又快的代码好。

3、不免俗的研究了一下。

对于C

  1. #include "stdio.h"
  2. "%d""%d",b);
  3. }

汇编后

  1.         .file   "test.c"
  2.         .section        .rodata
  3. .LC0:
  4.         .string "%d"
  5.         .text
  6. .globl main
  7.         .type   main, @function
  8. main:
  9.         pushl   %ebp
  10.         movl    %esp, %ebp
  11.         andl    $-16, %esp
  12.         subl    $32, %esp
  13.         movl    $0, 28(%esp)
  14.         movl    $0, 24(%esp)
  15.         movl    $0, 20(%esp)
  16.         movl    28(%esp), %eax
  17.         movl    %eax, 24(%esp)
  18.         addl    $1, 28(%esp)
  19.         addl    $1, 28(%esp)
  20.         movl    28(%esp), %eax
  21.         movl    %eax, 20(%esp)
  22.         addl    $1, 28(%esp)
  23.         addl    $1, 28(%esp)
  24.         movl    $.LC0, %eax
  25.         movl    24(%esp), %edx
  26.         movl    %edx, 4(%esp)
  27.         movl    %eax, (%esp)
  28.         call    printf
  29.         movl    $.LC0, %eax
  30.         movl    20(%esp), %edx
  31.         movl    %edx, 4(%esp)
  32.         movl    %eax, (%esp)
  33.         call    printf
  34.         leave
  35.         ret
  36.         .size   main, .-main
  37.         .ident  "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
  38.         .section        .note.GNU-stack,"",@progbits

可以看出没有赋值操作的 自增运算 不管是 ++i 还是i++ 都会被会变成一条相同的汇编(addl $1, 28(%esp))
如果有赋值操作的时候 汇编的条数是一样的 只是 几条语句的顺序不一样
所以C中这两种格式区别仅在于生成的值, 所以在仅使用它们的副作用时, 二者 完全一样,
http://c-faq-chn.sourceforge.net/ccfaq/node46.htm

但是 C++同学的表现是不一样的有兴趣的同学google一下,

悲剧 刚才写的一段代码丢了
简单说下php同学吧
有兴趣的通许参阅一下php源码 大概在这个文件里zend_compile.c
stackoverflow上有一些简单的说明:
http://stackoverflow.com/questions/1756015/whats-the-difference-between-i-and-i-in-php

原文有一段
:For further clarification, post-incrementation in PHP has been documented as storing a temporary variable which attributes to this 10% overhead vs. pre-incrementation.

是说 post-incrementation i++ 比pre-incrementation ++i 花费多10% 来存储一个临时变量。

在弄一个php扩展, 想把 扩展写成类的 形式, 于是在声明的时候 想给类加个array 属性
于是expect 代码是这样的

  1. span class=”st0″>"%d", requests->type);
  2.         zend_declare_property(concurrency_class_entry, "requests", strlen("requests"

结果报错,
PHP Fatal error: Internal zval’s can’t be arrays, objects or resources in Unknown on line 0
把requests->type 用zend_printf打出来发现 结果是4 是 ZEND定义的IS_ARRAY,
继续翻代码
发现在Zend/zend_API.c 里面zend_declare_property的原型 有这样的定义

  1. span class=”st0″>"Internal zval’s can’t be arrays, objects or resources"

不知何意看
staceflow 上也有人遇到这种问题
http://stackoverflow.com/posts/1105360/revisions
,没办法,
于是就改成在构造函数里面 增加属性的声明
just as follow

  1. span class=”st0″>"requests""requests"), requests);
  2. }
  3.  

在这里记下!

麻烦的zend                 tnnd 手册也不全
‘sso’ => array(
‘type’ => ‘Zend_Controller_Router_Route_Hostname’,
‘route’ => ‘sso.xxxxxx.com’,
‘defaults’ => array(
‘module’ => ‘sso’,
‘controller’=>’index’,
‘action’=> ‘index’
),

‘chains’ =>  array(
array(
‘type’=>’Zend_Controller_Router_Route’,
‘route’=>’:controller/:action’,
‘defaults’ => array(
‘module’     => ‘sso’,
‘controller’ => ‘index’,
‘action’     => ‘index’
)
)
)
)

大概是这么写的