iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何理解C++编译器编译功能
  • 769
分享到

如何理解C++编译器编译功能

2023-06-17 16:06:15 769人浏览 独家记忆
摘要

如何理解c++编译器编译功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面深度讲解C++中的大规模C++编译器,C++编译器具有很强的复杂性,并且源程序的行数也是非常多

如何理解c++编译器编译功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

下面深度讲解C++中的大规模C++编译器,C++编译器具有很强的复杂性,并且源程序的行数也是非常多,所以,在进行C++编译器编译时,一定要定一个计划表,这样才能更好的对C++编译器进行操作。

接着再跟着编译运行的主线来分析它的源程序。下面先看一下简单的C++例子,如下:

#001 #include <stdio.h> #002   #003 int main(void)  #004 {  #005  int nTest1 = 1;  #006  int nTest2 = 2;  #007  int nTest3;  #008  int i;  #009    #010  nTest3 = nTest1 + nTest2;  #011  printf("nTest3 = %d\r\n",nTest3);  #012    #013  for (i = 0; i < 5; i++)  #014  {  #015         printf("%d\r\n",nTest3+i);  #016  }  #017    #018  printf(__TIME__" "__DATE__"\r\nhello world\n");  #019  return 0;  #020 }  #021

上面的程序就是用来说明编译器工作的例子,它在***行里包含了头文件stdio.h,由于后面调用printf函数输出显示到屏幕里。第二行空行,第三行是main函数,它是C程序的入口函数。在main函数里,定义了几个局部变量,分别第5,6,7,8行的变量。第10行作两个变量nTest1和nTest2的加法,然后赋值给变量nTest3。第11行显示变量nTest3的值,是用10进制输出显示。在第13到16行是5次输出nTest3+i值。在第18行里输出编译这个程序的时间和hello world的字符串

C++编译器的任务,就是把上面的源程序变换到汇编代码输出,或者变成其它中间代码输出。在这里LCC编译器是输出汇编代码的,所以就不介绍其它的中间代码输出。那么LCC把上面的源程序变成什么样的汇编输出呢?下面就先把它的目标代码看一下,如下:

#001 [global $main]  #002 [section .text]  #003 $main:  #004 push ebx  #005 push esi  #006 push edi  #007 push ebp  #008 mov ebp, esp  #009 sub esp, 16  #010 mov dWord [ebp + -12], 1  #011 mov dword [ebp + -16], 2  #012 mov edi, dword [ebp + -12]  #013 mov esi, dword [ebp + -16]  #014 lea edi, [esi + edi]  #015 mov dword [ebp + -8], edi  #016 mov edi, dword [ebp + -8]  #017 push dword edi  #018 lea edi, [$L2]  #019 push dword edi  #020 call $printf  #021 add esp, 8  #022 mov dword [ebp + -4], 0  #023 $L3:  #024 mov edi, dword [ebp + -8]  #025 mov esi, dword [ebp + -4]  #026 lea edi, [esi + edi]  #027 push dword edi  #028 lea edi, [$L7]  #029 push dword edi  #030 call $printf  #031 add esp, 8  #032 $L4:  #033 inc dword [ebp + -4]  #034 cmp dword [ebp + -4], 5  #035 jl near $L3  #036 lea edi, [$L8]  #037 push dword edi  #038 call $printf  #039 add esp, 4  #040 mov eax, 0  #041 $L1:  #042 mov esp, ebp  #043 pop ebp  #044 pop edi  #045 pop esi  #046 pop ebx  #047 ret  #048 [extern $printf]  #049 [section .data]  #050 times ($-$$) & 0 nop  #051 $L8:  #052 db '00:30:28 Apr 07 2007', 13, 10, 'hello world', 10, 0  #053 times ($-$$) & 0 nop  #054 $L7:  #055 db '%d', 13, 10, 0  #056 times ($-$$) & 0 nop  #057 $L2:  #058 db 'nTest3 = %d', 13, 10, 0  #059

LCC是可以生成很多目标代码的C++编译器,在这里主要介绍生成X86的NASM汇编的代码。上面的汇编代码就是NASM的汇编格式,可以使用NASM编译生成目标文件,然后再用连接程序生成可执行文件。如果不能看懂上面的NASM汇编,就需要去看NASM手册了,这个手册在网上有下载。如果想更深入理解汇编生成机器码的过程,当然也可以深入分析NASM的程序实现。

从上面的C++和汇编也可以看出,汇编代码比C++代码要复杂,行数也比较多,还分了数据段和代码段。所以使用C++编译器是可以大大地提高生产效率的,并且更容易理解,这样就容易降低软件的成本,容易开发大规模的软件工程。

关于如何理解C++编译器编译功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网其他教程频道了解更多相关知识。

--结束END--

本文标题: 如何理解C++编译器编译功能

本文链接: https://www.lsjlt.com/news/291130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作