c/c++语言开发共享我在哪里可以找到++运算符的实现?

在哪里可以找到数字和指针的++运算符的C / C ++实现?

我环顾网络,但没有找到太多……

    可能是我的答案(数量)在某种程度上有帮助:
    你可以为指针开车答案

    i++如何在低级别工作。

     int main(){ int i=0,j=0; j=i++; // expresion includes two operations `+, = printf("%d %d",j,i); } 

    您可以使用带有gcc (g++) -S标志来反汇编它:
    我的代码名称是mc

     $ gcc -S mc 

    它将创建一个ms程序集文件。

    阅读我添加的评论

     pushl %ebp movl %esp, %ebp andl $-16, %esp subl $32, %esp movl $1, 28(%esp) // i due to declarations movl $0, 24(%esp) // j movl 28(%esp), %eax // this two lines are j = i movl %eax, 24(%esp) addl $1, 28(%esp) // increment to i, i++ movl $.LC0, %eax movl 28(%esp), %edx movl %edx, 8(%esp) movl 24(%esp), %edx movl %edx, 4(%esp) movl %eax, (%esp) call printf 

    这个如何赋值=然后先发生++ 。 如果++是后缀。

    编译器如何工作:

    (根据我的编译器)

    表达式j = i ++的抽象语法树的自下而上评估。

    源代码:

     j = i++; 

    在低级别分为两个指令(如汇编代码中所示):
    j = i i ++

    其中i++i = i + 1

     // abstract syntax tree + (post) /  /  = 1 /  /  ji 

    案例前缀++ (++ i):

    还假设如果表达式是j = ++i那么我直接编写抽象语法树:

    它将首先递增++然后=执行;

     // abstract syntax tree for j = ++i = /  /  j  + (prefix) /  /  i 1 

    j = ++i汇编代码,其中j=0i=1

     movl $1, 28(%esp) // i declaration movl $0, 24(%esp) // j addl $1, 28(%esp) // First Add 1 to i because i++ (before = perform) movl 28(%esp), %eax // Below two steps: = performed j = i movl %eax, 24(%esp) 

    实现位于编译器的源代码中。

    通常,您的编译器将执行以下操作:

    这里没有魔力。 i++通常映射到整数类型的简单addinc指令,并可能映射到C ++中的函数调用。

    我想你想看到为这个操作生成的机器代码。 这里 :

     //sg int main() { int i=0; ++i; return 0; } 

    编译: gcc -S -fverbose-asm -masm=intel test.c

    这是集会(相关部分):

     mov DWORD PTR [ebp-4], 0 # i, add DWORD PTR [ebp-4], 1 # i, 

    比较这个

     //sg int main() { int i=0,j; j=i+1; return 0; } 

    这会产生更长的asm:

     mov DWORD PTR [ebp-4], 0 # i, mov eax, DWORD PTR [ebp-4] # tmp62, i add eax, 1 # tmp61, mov DWORD PTR [ebp-8], eax # j, tmp61 

    另请注意,现代编译器会自动将i=i+1更改为更短的i++

    这是一个非常基本的问题,你最好从教科书中学到这个问题

    但无论如何

    对于数字

    内置++将数值增加1,从而改变内存内容。 您可以对整数和浮点对象使用此运算符。 你可以将它用作前缀运算符,编写++x ,以及作为后缀运算符,编写x++

    区别在于前缀和后缀变体产生的表达值。 前缀++x递增x并生成x的新值(在C ++中,因为我记得它产生了对x的引用,带有新值)。 后缀x++递增x并生成x原始值。

    指针

    前缀和后缀之间的区别是相同的,但“增加1”的定义是不同的

    对于指向T*数组的第i项的T*类型的指针,在递增该指针之后它指向数组的第i + 1项。

    这意味着机器代码级地址增加了sizeof(T)

    如果最终值是明确定义的,则表达式p+n ,其中n是整数,产生与n增量相同的最终值。 这也可以写成n+p

      以上就是c/c++开发分享我在哪里可以找到++运算符的实现?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522859.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐