ToB企服应用市场:ToB评测及商务社交产业平台

标题: C++学习:C++是怎样运行的 [打印本页]

作者: 涛声依旧在    时间: 2024-8-2 05:06
标题: C++学习:C++是怎样运行的
        C++ 是一种强范例的编程语言,支持面向对象、泛型和低级内存操作。它的工作机制包括从编写源代码到生成可实行文件的一系列步骤。C++与文件无关,文件只是容纳运行内容的载体,需要对文件以目标系统的规则编译后,才能在目标系统中运行。
 预处理

        在编译之前,预处理器会处理源代码中的预处理指令(比方 #include、#define 等)。预处理器会实行以下操作: 

比方,在test.h中只写一个 } ,此时下面两种情况的结果是一致的,“#include”只是将目标文件的代码粘贴在当前代码中,并不会做其他任何操作。


下图中,可以利用“INTEGER”代替“int”,编译运行正确,这是因为,在编译之前,即预处理时,“INTEGER”就已经被替换为“int”了,因此编译器根本就不知道"INTEGER"的存在,也就不会发生编译错误。


#if 0”代表禁用,即不会被编译器编译。

 “#ifdef”代表如果宏定义了某个参数,则实行内部的代码,否则跳过。
“#ifndef”代表如果没有宏定义某个参数,则实行内部的代码,否则跳过。

预处理的结果是一个纯粹的 C++ 源代码文件,没有任何预处理指令。
编译

        编译器将预处理后的 C++ 源代码转换为目标代码(通常是呆板码)。

编译的输出通常是一个或多个目标文件( .obj 或 .o文件)。
链接

        为了便于维护和步伐的简洁性,需要在多个cpp文件中对用户自定义的各种函数举行定义,此时就需要利用链接器将目标文件和库文件链接在一起,生成最终的唯一的可实行文件(.exe)。链路器会查抄实行步伐内需要利用的外部函数,即不在本文件内被声明定义的函数。然后将他们与被实行步伐链接在一起。于是,在实行步伐时,如果碰到了本文件内无声明定义的函数,就可以根据链接找到对应的文件里调用实行了。
        在链接时,并不是将所有cpp文件都与被实行步伐链接。如果被实行步伐中,没有利用这个外部函数,它就不会将这个函数链接进来。一个例外是,在被实行的步伐中,如果这个函数在另一个被声明的函数体里,则即便它没有被利用,也会被链接。这是因为即便这个文件倒霉用这个函数,链接器不能确定其他文件里不会利用它,所以会被链接。
        如下图所示,log.h中声明和定义了函数log,在主函数中将log嵌套在另一个函数printfunc中。如果不包含头文件log.h,则会报错:log未被声明。这其实很奇怪:因为我们表明了printfunc,即在主函数中倒霉用它,也就倒霉用log函数,但它依然会在链接时报错(link error),原因是不确定其他翻译单位利用printfunc函数。

如果不嵌套函数,也不包含头文件,同时倒霉用函数log,则不会报错。
链接的结果是一个可实行文件,可以在操作系统中运行。
运行

        生成的可实行文件可以在目标操作系统上运行。运行时,操作系统会加载步伐,将其分配到内存,并开始实行步伐的入口点,通常是 main函数,但也可以设置成其他函数,只是需要有一个入口点,但不一定是main。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4