当前位置: 首页 > news >正文

建设网站费用分析寻乌网站建设

建设网站费用分析,寻乌网站建设,ptp网站开发,dw怎样做网站链接C 采用分离编译模式#xff0c;分离编译指的是#xff0c;一个程序/项目是由若干个源文件共同实现#xff0c;编译时先把每个源文件单独编译生成目标文件#xff0c;再将所有目标文件连接起来#xff0c;形成单一的可执行文件。 C 编译的四个阶段#xff1a;预处理、编译…C 采用分离编译模式分离编译指的是一个程序/项目是由若干个源文件共同实现编译时先把每个源文件单独编译生成目标文件再将所有目标文件连接起来形成单一的可执行文件。 C 编译的四个阶段预处理、编译、汇编和链接。 这里以 g 为例用到的文件分别为 mymath.h、mymath.cpp 和 main.cpp 代码如下 // mymath.h extern int add(int, int);// mymath.cpp #include mymath.h // implement func add int add(int n1, int n2) {return (n1 n2); }// main.cpp #include iostream #include mymath.h #define ADD1 5 #define ADD2 6int main() {// call func add defined in mymath.h file// and printstd::cout add(ADD1, ADD2) std::endl;return 0; }1. 预处理(Preprocessing) 1读取C/C源程序对其中的伪指令以#开头的指令进行处理包括 a. 将所有的“#define”删除并且展开所有的宏定义。 b. 处理所有的条件编译指令如“#if”、“#ifdef”、“#elif”、“#else”、“endif”等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件将那些不必要的代码过滤掉。 c. 处理 “#include” 预编译指令将被包含的文件插入到该预编译指令的位置。注意这个过程可能是递归进行的也就是说被包含的文件可能还包含其他文件。 2删除所有的注释。 3添加行号和文件名标识。以便于编译时编译器产生调试用的行号信息及用于编译时产生的编译错误或警告时能够显示行号。 4保留所有的#pragma编译器指令。 预处理相当于根据预处理指令组装新的C/C程序。经过预处理会产生一个没有宏定义没有条件编译指令没有特殊符号的输出文件这个文件的含义同源文件无异只是内容上有所不同。 【补充】常用的预处理指令包括 宏定义#define 文件包含#include 条件编译#if、#elif、#ifndef、#ifdef、#endif、#undef 错误信息指令#error #line指令 布局控制#pragma 【注意】预处理不做语法检查。 以 g 为例g 使用参数 -E 对源文件进行预处理并在预处理后退出而不会进行后续的编译操作 g -E mymath.cpp -o mymath.i g -E main.cpp -o main.i 如果头文件和cpp 文件不在同一目录下可以通过参数 I 来指定。 g -E -Iheader_dir src.cpp -o target.i经过预处理后的文件大小会有一定的增加 $ wc -l main.cpp main.i13 main.cpp55993 main.i56006 total $ wc -l mymath.cpp mymath.i7 mymath.cpp17 mymath.i24 total2.编译(Compilation) 将源文件转换成特定汇编代码(assembly code)在这一阶段会执行语法检查。 以 g 为例使用参数 -S 对预编译后的文件编译生成汇编代码。 g -S mymath.i -o mymath.s g -S main.i -o main.s 【注意】 a. 这里的源文件它既可以是源代码文件也可以是源代码预处理之后的文件如果输入文件是源代码文件那么该命令会同时执行预处理和编译。如果是已经预处理后的文件那么直接执行编译。 b. 预处理和编译生成的文件都是文本文件可以直接在文本编辑器中打开并查看。 3.汇编(Assemble) 将汇编代码转换成机器码(machine code)生成可重定位目标程序的目标文件目标文件是二进制格式字节编码是机器指令。 【补充】汇编器是将汇编代码转变成机器可以执行的指令每一个汇编语句几乎都对应一条机器指令。所以汇编器的汇编过程相对于编译器来讲比较简单它没有复杂的语法也没有语义也不需要做指令优化只是根据汇编指令和机器指令的对照表一一翻译即可。 以 g 为例使用参数 -c 对编译后的文件编译生成汇编代码。 g -c mymath.s -o mymath.o g -c main.s -o main.o4.链接(Linking) 链接过程将多个目标文以及所需的库文件链接成最终的可执行文件(executable file)。 由汇编程序生成的目标文件并不能被立即执行其中可能还有许多没有解决的问题。例如某个源文件中的函数可能引用了另一个源文件中定义的某个符号变量或者函数调用等在程序中可能调用了某个库文件中的函数诸如此类。这些问题都需要经过链接程序的处理来解决。 例如在上面的例子中main.cpp 用到的 add 函数就是在另一个文件 mymain.cpp 中定义的。 链接程序的主要工作就是将有关的目标文件彼此相连接即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。 以 g 为例 g main.o mymath.o -o main.out有时候需要用到第三方库这个时候可以使用参数 -l g tmp.o -Ithirdpart_header_dir -Lthirdpart_dir -lthirdpart_lib_name 【最后的补充】按步编译不是必须的大多数时候 C 的编译是这样的 g main.cpp mymath.cpp -o main.out【关于各阶段生成的文件后缀名】 1.预处理生成.i的文件 2.编译生成 .s 文件.s 3.汇编生成.o的文件 4.链接生成可执行程序 .o。 最开始我以为输出文件的命名其实是在参数 -o 后自定义的尝试修改后缀为 “.p1” 或者其他自定义后缀后发现继续执行下一阶段的时候会提示 linker input unused [-Wunused-command-line-argument]也就是说编译器 g 会检查命令行中指定的输入文件的后缀名以此来识别文件类型暂时没有找到相关资料后续补充。
http://www.hkea.cn/news/14593165/

相关文章:

  • 做海外网站 服务器放哪网站的规划与建设_按时间顺序可以分为哪等五个阶段
  • 企业网站建设 会计分录照着别人网站做
  • 做网站费用多少随州有哪些网站建设的公司
  • 重庆做网站推广公司专业做ea的网站
  • 做面包有关电影网站室内设计师多少钱一个月
  • 郑州企业网站建设公司中国建设银行行号查询
  • 做自行车车队网站的名字南昌制作网站的公司
  • 专门做行测题的网站找别人做网站需要注意什么
  • 网站建设用几级域名合适wordpress 移动端接口
  • 外贸网站建设电话保洁公司网站源码
  • 0453牡丹江信息网租房学seo可以做网站吗
  • 营销型网站首页模板襄阳网站seo诊断
  • 网站内页制作嘉定网站建设网页制作
  • 网站免费申请东营网站
  • 网站建设经营特色微信群运营
  • 网站模板修改教程两个字的广告公司名字
  • 国外手机网站模板帮你做海报网站
  • word和wordpress银川网站优化
  • 现在哪些做进口商品的电商网站长沙做网站改版费用
  • 潍坊网站推广排名石家庄市规划建设局网站
  • 手机wap网站导航模板建立自我追求无我
  • 网站建设需要会什么软件有哪些内容租号网站建设
  • 这几年做啥网站致富网站后角色管理权限怎么设置?
  • ruhe用dw做网站白酒网站模板
  • 北京市工程建设交易中心网站景宁建设局网站官网
  • 汕头市企业网站建设服务机构公司简介网站怎么做
  • 铜川市住房和城乡建设局网站开发h5网站开发
  • 郑州+高端网站建设汕头seo网络推广
  • 威海做企业网站的公司天津建站公司模板
  • 官网查询网站网站风格对比信息表