首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(预编译)详解

如图所示,多个源文件(.c文件)单独经过编译器,进行编译生成目标文件(obj文件),这个过程为编译。...如图所示,翻译环境 可以继续细分为编译和链接,编译还可以继续细分为预处理,编译,汇编,其中在翻译过程中首先进行的是预处理过程,在预处理过程中首先会把test.c源文件中的注释删除以及#include头文件包含和...表达式的求值结果更容易 测。...3.3条件编译编译一条语句的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。 那么条件编译指令有哪些?...判断某个是否被定义,与的值 无关,只与是否被定义有关。 其中,条件编译语句在程序中只能存在一次,因为在预编译阶段就会进行替换,所以在程序中只能起一次的作用。

22210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    替换、条件编译、头文件展开

    替换、文件编译和头文件的展开 程序执行的几个步骤: 1.预处理: ①将头文件展开 ②替换 ③条件编译 ④去掉注释 2.编译: ①语义语法纠错 ②将.c文件编译成汇编语言 3.汇编:将汇编语言变成二进制机器语言...// 取消 #if // 如果给定的condition为真,则编译下面的代码 #ifdef // 如果已定义,则编译下面的代码 #ifndef // 如果没有被定义,则编译下面的代码 #elif 如果前面的#if给定条件为假,当前的条件为真,则编译下面的代码 #endif // 结束一个#if…#else条件编译块...#error // 停止编译并显示错误信息 的定义 #define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为或定义。...// 由于定义的AXE_TAG代表0,#if条件为假,不编译后面的代码,直到#endif,最后只输出 BB。去掉 #define AXE_TAG 0语句,效果也是一样的。

    2.2K20

    python 使用详解

    什么是类似python中的函数,可以传参数进去,但不能有返回值!在实际开发项目中,可以将一些复用代码抽取出来放到中,然后把不固定的值作为变量! 的使用!...在讲使用之前,我们先网上找一张表单注册的图片,图片如下: ? 然后我们通过模板渲染的方式来实现这个表单! 新建一个test.py文件,代码如下(相信很多朋友都记得滚瓜烂熟了!)...下面我们就用来实现这个效果! 首先,我们分析test.html文件表单的共性,是不是都有一个input标签啊!是不是??...OK,下面我们就把这段代码抽取出来放到中,代码如下: {#{% macro %}{% endmarco %}定义的标准语法,起始跟结束标签 #} {#macro后面的input为的名字,括号中的值为的参数...在实际开发项目中,用的地方还是挺多的,希望朋友们能够学会它,只有学会它,我们在开发项目中才能得心应手!

    3.6K10

    【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 定义 | 条件编译 | 编译器指示字 )

    示例 预处理 编译 汇编 链接 链接器 1 链接器简介 2 静态链接 3 动态链接 二 定义 使用详解 定义 常量 表达式 1 表达式简介 2 表达式 代码示例 3 表达式 与 函数对比...表达式 或 常量 作用域限制 1 定义 没有作用域限制 2 undef 限制定义 作用域 内置 1 内置 简介 2 日志 代码示例 三 条件编译 基本概念 1 条件编译简介 2...步骤1 : 编译预处理 (1) 预编译处理内容 ---- 预编译操作 : 1.处理注释 : 删除所有的注释, 使用空格取代注释内容; 2.处理定义 : 删除所有的 #define 定义, 替换 代码中...---- 表达式 与 函数对比 : 1.对编译器透明 : 表达式在预编译阶段进行替换处理, 编译器不知道的存在; 2.运算方面 : 替换不进行任何运算, 没有实参形参的概念, 全部都是机械的替换...编译结果( 命令行中不定义指定的 ) : 使用 gcc test_1.c 命令编译, 此处没有命定义 MAX , 编译时报错. 4.单步操作预编译结果 (定义) : 使用 gcc -DMAX

    1.2K10

    编码篇-学会小用和条件编译

    前言 定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,被大量使用,可以说底层开发离开define将寸步难行。...而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对的使用和依赖并不多。 编译编译器会在语义分析认定是后,将形参替换为实参,这个过程称为的展开。...但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译(不被编译的代码不会被运行) 条件编译语法格式 1、#if 编译预处理中的条件命令, 相当于C语法中的...,变量是运行时才产生的,而条件编译呢是在运行之前编译的。...所以条件编译的条件一般是利用定义,因为定义和条件编译都是编译之前进行的。

    76820

    iOS_预编译)#if #ifdef #ifndef #elif #else #endif

    经过预处理后程序可由编译程序对预处理后的源程序进行通常的编译,得到可供执行的目标代码。 OC中的预编译指令分为三种:定义、条件编译、文件包含。...1、定义 1.1、定义 和 取消定义 #define 标识符 字符串:定义个,标识符就是这个的名称,一般习惯用大写字母,以便与变量名区别。...#undef 标识符:取消一个,之后这个的定义就无效了。但可以重新使用#define进行定义。...根据预处理指令判断条件编译对应的代码,未满足条件的代码不会被编译(相当于没这段代码)。...条件编译指令: #if 当条件为真,则编译这段代码 #ifdef(if define) 当被定义,则编译这段代码 #ifndef(if no define) 当未被定义,则编译这段代码 #elif(

    1.1K20

    Python程序编译与反编译

    这方面的技术主要有两种:一种方法是把Python程序伪编译成扩展名为.pyc的字节码文件,一种是通过py2exe、pyinstaller或者cx_Freeze对Python程序进行打包。...之前的文章:Python安装扩展库与打包成exe可执行文件的方法已经介绍了打包的有关内容,本文主要介绍Python代码编译与反编译。...-O -m py_compile Stack.py,属于优化编译,会在Python安装路径下的__pycache__文件夹中生成Stack.cpython-35.opt-1.pyc文件。...此外,Python的compileall模块还提供了compile_dir()和compile_path()等方法,用来支持批量Python源程序文件的编译。...那么问题来了,是不是编译成.pyc文件以后真的无法查看源代码呢?很遗憾,还是有很多办法可以查看的,可以使用Python扩展库uncompyle6或其他类似模块来实现。

    3.1K60

    图解 Rust 编译器与语言设计 | Part1:Rust 编译过程与展开

    rust-complie-process 上图中间部分为 Rust 代码的整体编译过程,左右两边分别为过程和声明的解释过程。 Rust 语言是基于 LLVM 后端实现的编程语言。...以上是 Rust 整体编译流程。但 Rust 语言还包含来强大的元编程:「(Macro)」,宏代码是如何在编译期展开的呢?请继续往下看。...Rust 展开 Rust 本质上存在两类:声明(Declarative Macros) 与 过程(Procedural Macros) 。...所以后来 Rust 引入了过程。过程允许你在展开过程中进行任意计算。但我们不是说,Rust 没有暴露 AST API 吗?为什么过程可以做到这么强大?...理解过程的展开原理,将有助于你学习过程。 小结 本篇文章主要介绍了 Rust 代码的编译过程,以及 Rust 宏代码的展开机制,学习这些内容,将有助于你深入理解 Rust 的概念。

    5.3K31
    领券