C语言问答,并给出说明!谢谢!!!

默认分类 未结 1 1084
0巨蟹横行0
0巨蟹横行0 2023-03-19 17:38
相关标签:
1条回答
  • 2023-03-19 18:14

    我觉得D是错误的,这不一定,完全取决于编译器,请看下列简单程序:#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ int a = 0; ++a; ++a; ++a; printf("* me"); return 0;}再看这段代码的Release版的反汇编:int _tmain(int argc, _TCHAR* argv[]){ int a = 0; ++a; ++a; ++a; printf("* me");00BD1000 push offset string "* me" (0BD20F4h) 00BD1005 call dword ptr [__imp__printf (0BD20A0h)] 00BD100B add esp,4 return 0;00BD100E xor eax,eax }00BD1010 ret 可以发现 ++a;是可执行的语句,但是编译器把他们忽略了,因为这些语句对输出没有影响。再看下列代码:int _tmain(int argc, _TCHAR* argv[]){ int a = 0; ++a; printf("a is %d", a); return 0;}反汇编为:int _tmain(int argc, _TCHAR* argv[]){ int a = 0; ++a; printf("a is %d", a);00EB1000 push 1 00EB1002 push offset string "a is %d" (0EB20F4h) 00EB1007 call dword ptr [__imp__printf (0EB20A0h)] 00EB100D add esp,8 return 0;00EB1010 xor eax,eax }00EB1012 ret 可见,编译器直接把 int a = 0; ++a;替换为了 push 1 也可以看成是对 int a = 0; ++a;的一种编译。所以D错误,并非每条语句都会被编译为二进制代码.

    c

    D错了,并不是每条可执行语句最终都会被转换成二进制的机器指令,C语言中很多的指令都是写给编译器看的。比如 +-*/这些算数运算符号,在机器语言中就没有相对应的二进制机器指令。学了《汇编》之后,你就会对此深有理解了。

    我只知道楼上所谓+-*/没有机器码的说法完全是误导观众!任何代码都是要转换成机器码执行的! ***** 发个|黑 信| 神马|吧 息| |安 来| 广 就那么难?|全 源| 告|网 :| 年代 ***** 我认为C错了,因为C语言的源程序可以说文本文件,但是不一定是以ascii码形式存放的,看看文本文件存储时用的啥编码方式吧!!

    B错了,经过编译、翻译、连接之后才能形成一个真正课执行的二进制机器指令文件

    D很明显不对劲嘛

    0 讨论(0)
提交回复