加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮安站长网 (https://www.0517zz.com.cn/)- 数据开发、人脸识别、智能机器人、图像处理、语音技术!
当前位置: 首页 > 站长资讯 > 动态 > 正文

C语言中几种特殊标准定义

发布时间:2021-02-05 13:22:15 所属栏目:动态 来源:互联网
导读:涉及的流程 其内部主要包含 4 个步骤,分别是:预处理、编译、汇编以及链接。由于篇幅问题本文主要涉及前三部分,链接部分将会放到下一篇文章来讲解。 预编译 程序编译的第一步是 预编译 环境。主要作用是处理源代码文件中以 # 开始的预编译指令,例如:#inc

涉及的流程

其内部主要包含 4 个步骤,分别是:预处理、编译、汇编以及链接。由于篇幅问题本文主要涉及前三部分,链接部分将会放到下一篇文章来讲解。

预编译

程序编译的第一步是 “预编译” 环境。主要作用是处理源代码文件中以 ”#“ 开始的预编译指令,例如:#include、#define 等。

常见的处理规则是:

  • 将所有 #define 删除,并且展开所有的宏定义。
  • 处理所有条件预编译指令,比如 if、ifdef、elif、else、endif。
  • 处理 #include 预编译指令,将所包含的文件插入到该预编译指令的位置(可递归处理子级引入)。
  • 删除所有的注释。
  • 添加行号和文件名标识,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时显示行号。
  • 保留所有的 #pragma 编译器指令,后续编译器将会使用。

在预编译后,文件中将不包含宏定义或引入。因为在预编译后将会全部展开,相应的代码段均已被插入文件中。

像 Go 语言中的话,主要是 go generate 命令会涉及到相关的预编译处理。

编译

第二步正式进入到 "编译" 环境。主要作用是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。该部分通常是整个程序构建的核心部分,也是最复杂的部分之一。

执行编译操作的工具,一般称其为 “编译器”。编译器是将高级语言翻译成机器语言的一个工具。例如我们平时用 Go 语言写的程序,编译器就可以将其编译成机器可以执行的指令及数据。那么我们就不需要再去关心相关的底层细节,因为使用机器指令或汇编语言编写程序是一件十分费时及乏味的事情。

且高级语言能够使得程序员更关注程序逻辑的本身,不再需要过多的关注计算机本身的限制,具有更高的平台可移植性,能够在多种计算机架构下运行。

编译过程

编译过程一般分为 6 步:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。整个过程如下:
 

公告内容指出,要想获得该计划的资格,Publisher 的 Docker 命名空间内的所有资源库必须满足以下条件:

  • 公开的、非商业性的;
  • 符合所有开放源码倡议(OSI)关于自由发布、开放性和源代码完整性的定义,并且是非歧视性的;
  • 根据 OSI 批准的开源许可证分发镜像;
  • 生成用于运行应用程序的 Docker 镜像。

想参加这个项目的人可以通过在线表格申请,Docker 会对其进行资格审查。一旦获得批准,项目就必须与 Docker 签订交叉推广协议,Docker 将在博客、网络研讨会等渠道对项目进行宣传,同时项目将成为 Docker 的公共参考,并在所有适当的页面上显示 Docker 的链接。

Cloud Foundry 基金会的技术运营经理 Chris Clark 在一份声明中表示,多年来,DockerHub 一直是开源容器镜像分发的事实标准,并就 Docker 对开源社区得贡献表示了感谢。

Docker 表示,项目可以自由维护其他不完全或部分符合开源计划的 Docker 命名空间,但这些命名空间将按照正常规则运行,供免费和付费用户使用。当然,Docker 表示,如果有必要,它可以随时审查、改变或终止参与该计划。

目前,已经有来自世界各地的 40 多个组织获得了这一项目的资格,包括有 Apache 软件基金会(ASF)、Cloud Foundry 和 Jenkins 等。

(编辑:淮安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读