精华内容
下载资源
问答
  • C语言预处理理论

    2020-09-28 17:52:37
    C语言预处理理论 由源码到可执行程序过程 源码-(编译)-目标文件.0-(链接)-elf可执行程序 源码.c-(预处理)-与处理过.i源文件-(编译)-汇编文件.s-(汇编)-目标文件.0-目标文件.0-(链接)-elf可执行程序 gcc就是...

    C语言预处理理论
    由源码到可执行程序的过程
    源码-(编译)-目标文件.0-(链接)-elf可执行程序
    源码.c-(预处理)-与处理过的.i源文件-(编译)-汇编文件.s-(汇编)-目标文件.0-目标文件.0-(链接)-elf可执行程序

    gcc就是一个编译工具链

    预处理的意义
    编译器本身的主要目的是编译源代码,将C的源代码转化成.S的汇编代码。编译器聚焦核心功能后,就剥离了一些非核心的功能到预处理器去了
    预处理器帮编译器做一些编译前的杂事

    预处理:#include #(注释) #if #elif #endif #ifdef (条件编译) #define(宏定义)

    GCC中只预处理不编译的方法
    gcc xx.c -o xx 可以指定可执行程序的名称
    gcc xx.c -c -o xx.o 可以指定只编译不链接,也可以生成.o的目标文件
    gcc -E xx.c -o xx.i 只预处理不编译 帮助研究预处理过程,帮助debug程序

    //预处理之后,#define本身不见了,typedef重命名语言还在,说明他和宏定义是由本质区别的(由编译器来处理,而不是预处理器处理)
    #include<stdio.h>
    
    #define pchar char *
    typedef char * PCHAR
    
    int main(void)
    {
    	pchar p1,p2;
    
    	return 0;
    }
    

    例子 :
    #include<> 专门用来包含系统自带的头文件 ,C语言编译器只会找系统指定目录去寻找这个头文件,不会在当前目录下去找
    “”带自己写的头文件 编译器默认会现在当前目录下去寻找相应的头文件,如果没找到再去系统指定目录找

    条件编译
    有时候我们希望程序有多种配置,我们在源代码便携式写好各种配置的代码,然后用开关,在源代码级别去修改配置开关来让程序编译出不同的效果
    #ifdef XX //如果前面有定义xx这个符号,就成立执行下面语句
    #elif //如果没有定义xx这个符号,执行这个语句
    #endif

    #if
    #elif //如果没有定义xx这个符号,执行这个语句
    #endif

    展开全文
  • C语言预处理

    2019-11-05 10:34:27
    由源码可执行程序过程 源码.c->(预处理)->预处理过的.i文件->(编译)->生成汇编文件.s->(汇编)->目标文件.o->(链接)->...预处理的意义 2.1 编译器本身的主要目的是编译源代码...
    1. 由源码可执行程序过程
      源码.c->(预处理)->预处理过的.i文件->(编译)->生成汇编文件.s->(汇编)->目标文件.o->(链接)->elf可执行文件
      这个过程使用到了预处理器;编译器;汇编器;链接器;再加上其他一些额外的会用到的可用工具,合起来叫编译工具链。GCC就是一个编译工具链。
    2. 预处理的意义
      2.1 编译器本身的主要目的是编译源代码,将c的源代码转化成.S的汇编代码。
      编译器聚焦核心功能后就剥离出了一些非核心的功能到预处理器去了。
      2.2 预处理器帮编译器做一些编译前的杂事。
    3. gcc中只预处理不编译的方法
      3.1 gcc编译时可以给一些参数来做一些设置
      譬如:gcc xx.c -o xx 可以指定执行程序的名称
      譬如:gcc xx.c -o xx.o 可以指定只编译不链接,也可以生成.o的目标文件。
      3.2 gcc -E xx.c -o xx.i 可以实现只预处理不编译。
      一般情况下没必要只预处理不编译,但有时候这种技巧可以用来帮助研究预处理过程帮助debug(调试)程序。
      总结:宏定义被处理时的现象有:
      第一:宏定义语句本身不见了(可见编译器根本就不认识#define,编译器根本不知道还有个宏定义)
      第二:typedef重命名语言还在,说明它和宏定义是有本质区别的,(说明typedef是由编译器来处理,而不是预处理的)
    展开全文
  • c语言预处理

    2015-03-05 16:07:05
    条件指示符#ifndef 最主要目的是防止头文件重复包含和编译。 #ifndef x //先测试x是否被宏定义过 #define x 程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1 #else 程序段2 //如果x已经定义过...

    预处理功能中三种:宏定义,文件包含和条件编译


    条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。


    #ifndef x //先测试x是否被宏定义过
    #define x
    程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1
    #else
    程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。
    #endif//终止if




    展开全文
  • C语言预处理01

    2020-12-03 17:12:15
    小甲鱼预处理01 typedef意思: ...在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确新名字,另一个是简化一些比较复杂类型声明。 例子: #include <stdio.h> #define PIN

    小甲鱼预处理01
    typedef的意思:
    类型定义。

    它就和define相对应,define是把一个自己起的名字的常量定义为代替它的另一个常量来同。

    typedef是把一个自己起的名字的类型用已经有的类型代替使用,如:typedef int Type1;之后如果有Type1 i ;系统则理解为int i;。

    在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
    例子:

    #include <stdio.h>
    
    #define PIN1 char*
    typedef char* PIN2;
    
    void main()
    {
    	PIN1 x,y;
    	PIN2 a,b;
    	
    	printf("%d,%d\n",sizeof(x),sizeof(y));
    	printf("%d,%d\n",sizeof(a),sizeof(b));
    }
    

    在Dev下,编译结果为
    8,1
    8,8
    其实main函数里第一行代码实际为:char* x,y;
    而第二行代码为:char* a,char*b;

    小甲鱼对宏定义的例子:不用循环和递归,实现打印数字从0到999
    源码:

    #include <stdio.h>
    #define A(x)x;x;x;x;x;x;x;x;x;x;
    int main(void)
    {
    	int n=0;
    	A(A(A(printf("%d",n++))));
    	return 0;
    }
    

    运行结果为01234567891011…998999

    展开全文
  • 6-1 C语言预处理理论

    2020-10-19 21:28:13
    六、C语言宏定义与预处理、函数和函数库 6.1.1 由源码到可执行程序的过程 (1)源码.c—>(预处理)—>预处理过的.i源文件—>...6.1.2 预处理的意义 (1)编译器本身的主要目的是编译源代码,将C的源代码
  • 编译器本身主要目的是编译源代码,将C语言的源代码转化成.s汇编代码。 编译流程图 在Linux系统中,GCC编译程序会读取源代码.c文件,并且将其翻译成一个可执行文件.out,整个过程共四个阶段,由编译工具链...
  • C语言的预处理

    2020-12-29 22:41:03
    预处理就是在编译代码之前对源代码进行重新组织、改写以达到我们预期编译的目的,我们在编写代码时需要用#include导入头文件,用#define定义宏来增强代码可读性,或者用#if,#else来解决不同平台的代码移植问题,这些...
  • 编译器的目的就是将一个 C 语言程序转化为另一个不含任何 # 的 C 语言程序。 下面是一些有关 C 语言预处理器的有趣的事实: 当我们使用 include 指令时,在预处理后,头文件中的内容将被复制到当前文件中,尖括号 ...
  • C语言篇——小谈预处理命令

    热门讨论 2015-09-07 21:18:42
    预处理简单来说:就是C语言中用于提高效率,把一些重复性调用内容定义一个公用部分。这个公用部分可以是单个储存值得常量,也可以是储存一段定义代码文件,也可以是对一些条件判断执行。 专业来说:预处理...
  • 第10章 编译预处理 编译预处理的概念 宏定义 文件包含 条件编译 10.1 编译预处理的概念 编译预处理是指在编译程序对源程序进行编译之前由编译预处理程序所做的工作其目的是对程序中的特殊命令作出解释以产生新的源...
  • 本章教学目的 掌握宏定义两种形式掌握文件包含使用方法了解条件编译概念 本章教学重点宏定义两种形式文件包含使用方法 本章教学难点带参数宏定义;主要内容;编译预处理是指一些行首以#开头特殊语句在对...
  • 浅谈c语言宏定义#define运用前言一、无参宏定义二、带参宏定义三、# 操作符四、# # 操作符总结 ...在这里我整理了一些关于#define预处理命令运用,虽然不是很深入,但以实用为目的。 一、无参宏定义
  • 预处理学习笔记

    2010-01-28 23:41:00
    C语言源程序的加工分为三个步骤:预处理,...C语言提供预处理命令的目的是为了使编程更方便。 如果源程序里某行的第一个非空符号是#,则该行就是预处理命令。下面是各种预处理命令: 1. 文件包含命令:#include 2.
  • C语言复习

    2021-04-14 13:12:58
    函数(c语言调用预处理指令后,写第一行main就是在调用函数) 变量 想要达成目的的算法(语句、表达式) 注释(解释代码,或者做标记以防在大量代码中无法进行修改) #include<stdio.h> int main { printf...
  • C语言c语言基础知识梳理(超全)

    千次阅读 多人点赞 2020-04-08 18:27:10
    写此篇博客的目的主要是为了梳理一下c语言基础知识,因为不会像学c语言那样有很多例子,或者按照初学c语言的顺序,所以不推荐刚学习c语言的人阅读。 本篇文章有什么: 对c语言系统的梳理 对一些使用的细节...
  • 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) ;2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个;3. 预处理器标识#error的目的是什么?
  • 预处理(部分)

    2021-01-10 16:56:33
    预处理命令是c标准规定加入C谔言源程序中,目的是改进程序设计环境,提高编程效率.但这些命令不是C语言本身组成都分,所以编泽器无法识别,不能对它们直接进行变编译.因而要编译程序在对c源程序进行编译之前,先由预...
  • 大三下学期编译原理第一次实验,问题还是很多,欢迎大家指正、参考。 一、目的 深入了解编译技术中...在设计状态转换图中,首先对输入串做预处理,即剔除多余空白符(在实际词法分析中,预处理还包括剔除注...
  • C语言#Error作用

    2020-10-27 09:13:30
    目的就是保证程序是按照你所设想那样进行编译。 下面举个例子: 程序中往往有很多的预处理指令 #ifdef XXX … #else #endif 当程序比较大时,往往有些宏定义是在外部指定(如makefile),或是在系统...
  • 因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。 C源程序的结构特点  为了说明C语言源程序结构的特点,先看以下几个程序。这几个程 序由简到难,表现了...
  • 通过本篇文章,我们学习目的如下: 1、预处理指令 2、函数 3、变量 4、语句&表达式 5、注释 我们可以通过C语言入门实例,来解释这些相关概念。 接下来我们讲解一下上面这段程序: 程序第...
  •  C语言宏可以分为有参数宏和无参数宏两类。 1.无参数宏(也是我们最常用一类宏) a.形式为:#define 标识符 宏体 (eg:#define x 100 其功能是指定标识符 x 来代替100. 这种替换主要目的是为用户在...
  • C语言分步编译

    2018-08-04 08:55:00
     在进行C语言源码至可执行程序整个过程中,整个形成过程可以分为四步: 1、预处理 gcc -E hello.c -o hello.i   目的:  (1)宏定义展开  (2)头文件展开  (3)条件编译  (4)去掉注释 2、编译 gcc...
  • C语言 枚举实验

    2013-08-21 10:26:28
    目的】实验验证是否在预处理时进行替换。 // test.c预处理测试 enum Etype {  A, // 未赋值枚举值  B=2 // 赋值枚举值 }; #define C 3 // 宏定义   void main() { int a = A; int b
  • c语言程序设计

    2018-11-11 21:03:14
    编译预处理、主函数()、函数n()等,主函数位置不一定在最前面,可以在程序中部或后面,主函数名字固定为main。 2.软件=程序+设计 程序:为实现特定目标或解决特定问题而用计算机语言编写命令序列集合。即为...
  • C语言宏定义

    2012-11-15 22:17:12
    宏定义是C提供三种预处理(宏定义、文件包含、条件编译)其中一种,其主要目的是为程序员在编程时提供一定方便,并能在一定程度上提高程序运行效率。 在C语言中允许用一个标识符来表示一个字符串,称为宏...
  • 从汇编和底层角度看c和类c语言

    千次阅读 2015-12-29 22:55:21
     写这篇文章的目的是对近期底层学习的总结,也算是勉励自己吧,毕竟是光靠兴趣苦逼自学不是自己专业的东西要承受很多压力。  要想深入理解C语言就不得不要知道几个知识点: 1.众所周知用任意一高级语言(不是...
  • 谭浩强C语言word版

    2011-08-11 18:47:01
    以实用编程为目的,达到举一反三效果) 1、C语言的概述 2、程序灵魂-算法 3、数据类型、运算符与表达式 4、最简单C程序设计-顺序程序设计 5、分支结构程序 6、循环控制 7、数组 8、函数 9、预处理命令 10、...
  • C语言参考手册(译)

    2012-01-07 22:44:30
    这些练习主要目的是帮助读者理解C语言的基本机制及其重要细节,其中并不涉及复杂程序设计技术与问题。 本书可以作为高等院校计算机专业C语言课程教材和参考书,对于一般C程序员也有重要参考价值。

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
热门标签
关键字:

c语言预处理的目的

c语言 订阅