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

宏(预编译)详解

在学习预编译之前我们有必要先大致了解一下一个程序从开始到结束的过程,这样有利于我们加深对程序运行的理解。 一、程序的编译环境 在ANSI C的任意一种实现中,存在两个不同的环境。...三、预编译详解 3.1预定义符号 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__...表达式的求值结果更容易预 测。...3.3条件编译 在编译一条语句的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的。因为我们有条件编译指令。 那么条件编译指令有哪些?...判断某个宏是否被定义,与宏的值 无关,只与宏是否被定义有关。 其中,条件编译语句在程序中只能存在一次,因为在预编译阶段就会进行宏替换,所以在程序中只能起一次的作用。

25910

C中的预编译宏定义

这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理....C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行....在有的C编译器中, 这些过程统统由一个单独的程序来完成, 编译的不同阶段实现这些不同的功能. 可以指定相应的命令选项来执行这些功能....在gcc中, 进行编译预处理的程序被称为CPP, 它的可执行文件名为cpp. 编译预处理命令的语法与C语言的语法是完全独立的....比如: 你可以将一个宏扩展为与C语法格格不入的内容, 但该内容与后面的语句结合在一个若能生成合法的C语句, 也是可以正确编译的.

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

    Java中的宏变量,宏替换详解。

    群友在微信群讨论的一个话题,有点意思,特拿出来分享一下。 输出true false 来看下面这段程序,和群友分享的大致一样。...首先来理解下宏变量: Java中,一个用final定义的变量,不管它是类型的变量,只要用final定义了并同时指定了初始值,并且这个初始值是在编译时就被确定下来的,那么这个final变量就是一个宏变量。...编译器会把程序所有用到该变量的地方直接替换成该变量的值,也就是说编译器能对宏变量进行宏替换。...是宏变量,b、c不是。...所以,再回到上面的程序,finalWorld2和finalWorld4是final定义的,也是在编译期间能确定下来的,所以它能被宏替换,编译器就会让finalWorld2和finalWorld4指向字符串池中缓存的字符串

    3.8K50

    Docker 文档编译 - 预页面格式

    字体格式将会告诉页面在 Markdown 文件的最上端,使用 3 个横线作为开始和结束。其中包括有 YAML 内容,下面为可以支持的关键字,包括有表头,描述和关键字是否是必须的。...description 是 一个描述页面内容的例子,将会添加到 HTML 的 metadata 上面。...如果选择 true 的话, TOC 将不会在 HTML 输出的时候创建。默认的配置选项是 false。针对没有页面头部内容,将会创建相同的显示页面。...下面显示的内容是一个有效的页面 Metadata 配置(没有转换为 HTML)页面。在预页面格式中内容的顺序是没有关系的,你可以随意调整上面参数的顺序。.../ title: Get Docker for Ubuntu toc_min: 1 toc_max: 6 skip_read_time: true no_ratings: true --- 上图显示的是一个预页面格式

    88100

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

    宏替换、文件编译和头文件的展开 程序执行的几个步骤: 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.3K20

    编译 java_如何编译java

    用命令32313133353236313431303231363533e58685e5aeb931333337613139提示符编译java程序的步骤: 1.先新建文本文档,输入自己的java程序。...这里我写一个简单的java程序,来做示范。...4.由于我的那个java文本保存在了F:/java/(在F盘下的java文件夹里)下,所以如果要想编译,就需要先通过命令提示符进入java这个文件夹,具体步骤如下: 1.进入F盘:输入【F:】,然后按下回车键...这里的cd的意思就是进入的意思。 5.紧接着调用java编译器进行编译。 输入【javac HelloDate。java】,然后按下回车键【Enter】 然后运行结果。...输入【java HelloDate】,按下回车键【Enter】 经验总结:运行一个java程序的大概的流程是: 书写源代码——>编译——->运行—->结束。

    2.4K30

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

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

    77720

    Java的即时编译

    01 — 编译型和解释型 如果是计算机专业的同学,在大学期间C,C++,Java等计算机高级语言肯定都学过,都会知道C/C++语言被定义为编译型语言,而Java被认为是解释型语言,那么什么是编译型什么是解释型呢...因为Java程序首先需要被编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机进行解释。...Java虚拟机在Java运行效率上如何改善和提高的呢?...为了提高热点代码的执行效率,Java虚拟机在程序运行时将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化(哪些层次的优化,这里先不说),完成这个任务的编译器叫做即时编译器(Just In Time...JIT编译器并不是虚拟机必须的部分,Java虚拟机规范(这是一本书,大家可以网上购买或者公众号发送Java虚拟机规范获取pdf网盘下载地址)并没有规定Java虚拟机内必须要有JIT编译器存在,更没有限定或指导即时编译器应该如何去实现

    78810

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

    .i 命令进行预处理; 3.执行结果 : ---- (3) 宏表达式 与 函数对比 ---- 宏表达式 与 函数对比 : 1.对编译器透明 : 宏表达式在预编译阶段进行替换处理, 编译器不知道宏的存在...内置宏 (1) 内置宏 简介 ---- 内置宏举例 : 1.__FILE__ : 代表被编译的文件名称 ; 2.__LINE__ : 代表当前的行号 ; 3....\n"); return 0; } 2.编译结果( 命令行中定义指定的宏 ) : 使用 gcc -DMAX test_1.c 命令编译, 此处定义了 MAX 宏, 编译执行成功. 3....编译结果( 命令行中不定义指定的宏 ) : 使用 gcc test_1.c 命令编译, 此处没有命定义 MAX 宏, 编译时报错. 4.单步操作预编译结果 (定义宏) : 使用 gcc -DMAX...#运算符 ---- #运算符作用 : 1.将宏参数转为字符串 : # 运算符 可以在 编译 的 预编译 阶段, 将宏定义中的参数, 转化为 字符串 ; 2.预处理器开始符号 : 预处理器 开始处理

    1.3K10

    java编译过程_Java编译运行过程

    大家好,又见面了,我是你们的朋友全栈君。 Java编译运行过程 在上一篇文章中,我们了解了第一个Java入门程序,以及如何编译和运行第一个Java程序。...本文主要了解以下编译和运行Java程序时会发生什么。此外,我们还会分析一些常见的问题。...1 Java程序编译过程 在编译时,Java文件由Java编译器(它不与底层操作系统交互)将Java代码转换为字节码(.class)。...3 两个常见的问题 3.1 Java源文件命名方式 问题:一个class的名称为Simple,Java源文件名称可以不是Simple.java么?...答案是可以的,但是前提是该类不是public修饰符。 3.2 一个Java源文件写多个类 问题:一个Java源文件中可以写多个类么? 答案是可以的。

    2.1K10

    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

    Java| 编译和反编译

    不同的语言都有自己的编译器,Java语言中负责编译的编译器是一个命令:javac 当我们写完一个HelloWorld.java文件后,我们可以使用javac HelloWorld.java命令来生成...javac是收录于JDK中的Java语言编译器。该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。 什么是反编译?...Java语言中的反编译一般指将class文件转换成java文件。 有了反编译工具,我们可以做很多事情,最主要的功能就是有了反编译工具,我们就能读得懂Java编译器生成的字节码。...Java常用反编译工具 本文主要介绍4个Java的反编译工具:javap、jad和cfr以及可视化反编译工具JD-GUI JAVAP javap是jdk自带的一个工具,可以对代码反编译,也可以查看java...CFR将反编译现代Java特性–Java 8 lambdas(Java和更早版本中的Java beta 103),已经反编译Java 7 String,但CFR是完全用Java 6编写的.

    2.5K10

    ant 编译java(java是干啥的)

    1.什么是ant ant是构建工具 2.什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3.ant的好处 跨平台 –因为...: 编写一些程序 编译它们 把它打包成jar包 把他们放在应该放置的地方 运行它们 这里为了简单起见只写一个程序,就是HelloWorld.java程序代码如下: package test.ant; public...,你可以手动的用javac 、copy 、jar、java来完成,但是考虑一下如果你有成百上千个类,在多次调试,部署的时候,一次次的javac 、copy、jar、java那将是一份辛苦的工作,现在看看...会先检查init是否曾经被执行过,如果执行 过则直接直接执行compile,如果没有则会先执行它依赖的target例如这里的init,然后在执行这个target如我们的计划: 编译: 做jar包: 运行...,例如windows上有更多更简单,更容易使用的工具,比如eclipse+myeclipse eclipse+wtp等等,无论是编译,部署,运行使用起来比ant更 容易,方便但有些情况则是ant发挥的好地方

    96711

    Java代码的编译过程

    知识手册里写的 仿佛我从来没学过一样 有点沉不下心来看 整理一下 笔记 从Javac代码的总体结构来看,编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下所示。 1....插入式注解处理器的注解处理过程: 在Javac源码中,插入式注解处理器的初始化过程是在 ** initPorcessAnnotations() ** 方法中完成的,而它的执行过程则是在processAnnotations...这个方法会判断是否还有新的注解处理器需要执行,如果有的话,通过JavacProcessing-Environment类的 doProcessing() 方法来生成一个新的JavaCompiler对象,对编译的后续步骤进行处理...字节码生成,将前面各个步骤所生成的信息转化成字节码。...上述3个处理过程里,执行插入式注解时又可能会产生新的符号,如果有新的符号产生,就必须转回到之前的解析、填充符号表的过程中重新处理这些新符号,从总体来看,三者之间的关系与交互顺序如图所示。 ?

    94620

    反编译Java_java反编译的代码可以修改么

    大家好,又见面了,我是你们的朋友全栈君。 1.反编译是java开发者必不可少的东西,今天我们jd-gui-0.3.6.exe这个工具来反编译class文件。...下面是下载地址: http://download.csdn.net/detail/luozheng4698729/9728359 2.工具使用起来很简单,双击打开–>File—>OpenFile选择你要反编译的...下面我们来看下几个反编译后的神奇例子: //------------- 实例1 ------------ //反编译前 public class Test { public static void main...public static void main(String[] paramArrayOfString) { java.util.HashMap localHashMap = new java.util.HashMap...强烈推荐一套Java进阶博客,都是干货,走向架构师不是梦! Java进阶全套博客 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    80010

    java官方编译器_JAVA 编译器

    因此,javac是把Java源代码编译成Java字节码,即JVM可以识别的二进制;表面上就是将.java文件转成.class文件。 javac做了些什么? 主要由4个模块组成。...使用即时编译器技术,能够加速 Java 程序的执行速度。下面,就对该编译器技术做个简单的讲解。...在 Java 7 版本,分层编译默认的代码缓存大小经常是不够的,需要经常提高代码缓存大小。大型项目若使用 client 编译器模式,则也需要提高代码缓存大小。...当 JVM 执行一个 Java 方法,它会检查这两个计数器的总和以决定这个方法是否有资格被编译。如果有,则这个方法将排队等待编译。这种编译形式并没有一个官方的名字,但是一般被叫做标准编译。...不同的 Java 版本输出形式不一样,我们这里所说的是基于 Java 7 版本的。 编译日志中大部分的行信息都是下面的形式: 清单 2.

    2.2K30

    java程序编译命令_使用 java 命令编译运行 java 程序

    大家好,又见面了,我是你们的朋友全栈君。 java 编译的过程,就是将 java 项目从源文件变成 .class 文件的过程,而 .class 文件,最后会被加载到JVM 中运行。...在 JDK bin/ 目录下,提供了 javac 命令,用于将 .java 源文件编译成 .class 字节码文件,提供了 java 命令,以 Main_Class 为入口,根据运行需要,加载相应的 class...关于环境变量 如果在没有引用第三方 jar 的情况下,想在任意目录下直接运行 javac 编译 .java 文件,则需要设置 PATH 和 CLASSPATH 环境变量,关于如何设置,可参考 Ubuntu...编译生成 .class 文件 -> 使用 java 命令运行程序 >$javac Hello.java >$java Hello 如果有多个 .java 文件,则多了一个步骤,需要先打包成 .jar...文件,最后使用 java -jar xx.jar 命令运行即可,总结如下:使用 javac 编译生成 .class 文件 -> 使用 jar 命令生成 jar 包 -> 使用 java 命令运行程序 jar

    3.1K20
    领券