1.简单理解什么是编译?
    编译就是编译源代码,将C源代码转化成.s的汇编代码。
    编译器聚焦处理核心功能代码,预处理器处理剥离出来的非核心代码。
2.什么是预编译?预处理与预编译之间有什么联系?
   预编译就是预处理,是为编译做准备工作的阶段。预处理器在此阶段对一些代码进行预处理。
   预处理的内容包括:处理头文件包含( #include )、宏定义( #define )、条件编译( #if #else #ifdef #ifndef #elif #endif),去掉注释。
3.预编译指令有哪些?
    #include 指令:
    该指令指示预处理器将xxx.xxx头文件的全部内容原封不动地在此处展开。
    若用<>括起文件则在系统指定的目录中寻找文件;若用" "括起文件则在当前目录中寻找文件。
    #define指令:
   宏定义在预处理阶段有预处理器进行替换,这个替换是原封不动地替换。
   第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#ifdef配合使用;
   第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,原因见注1);
   第三种是定义"函数",如#define get_max(a, b) ((a)>(b)?(a):(b)) 则以后使用get_max(x,y)就可以得到x和y中较大的数
    
    带参宏、函数、内联函数:
    带参宏在预处理阶段进行原封不动地替换,过程由预处理器处理,故没有调用开销,也没有传参开销。但是参数没有进行类型检查。
    函数在编译阶段进行处理,程序是在调用函数时,跳转到函数中执行,过后返回函数调用的地方。函数调用是会对函数参数进行静态类型检查(传参与声明参数的类型是否一致)。
    内敛函数是在预编译阶段进行处理。函数没有调用开销的同时编译器会对函数参数进行类型检查。

   #if、#ifdef、#if define(x)、#else、#endif、#endif 等条件编译指令:
   条件编译的应用:
   编译头文件: #ifndef xxx.x #define xxx.x #endif,防止头文件重复包含;
   DEBUG和RELEASE版本的程序的切换:#define #undefine / #ifdef #else #endif ;
   注释一块调试程序:#if 0/1 #endif; 
     #ifdef 与 #if defined 的区别:
     #if defined 可以组合复杂的预编译条件,#if defined(a) && defined(b)  code...  #endif

预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)相关推荐

  1. c语言编译笛卡尔叶形线,全国计算机等级考试C语言2级笔试题-(25)2007年4月1

    2007年4月全国等级考试题目 第25次(已经修改) 一.选择题 下列各题A).B).C).D)四个选项中,只有一个选项是正确的. (1-11题,软件技术基础单向选择题目) 1. 下列叙述中正确的是( ...

  2. VS2017中预编译头的作用(删除pch.h报错的原因)

    刚使用VS2017的时候新建的项目的pch.h文件搞得一头雾水,点进去看了这个文件,发现里面什么内容都没有,但是把他删除之后就会报错说没有添加pch.h文件.百度了一下,发现这个是VS2017新加的一 ...

  3. C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接

    1. C++中头文件(.h)和源文件(.cpp)都应该写些什么: 总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现.对应的同名(可以不同名,但 ...

  4. C++中默认选中预编译头#includestdafx.h作用

    在Visual C++ 2012入门经典一书中 这样描述到: 默认选中的预编译头文件选项使该项目创建stdafx.h文件.这种机制是为了当程序中有大量文件时使编译过程效率更高,但我们的许多例子中都是不 ...

  5. mybatis以及预编译如何防止SQL注入

    SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedia SQL ...

  6. ASP.NET 网站预编译概述

    默认情况下,在用户首次请求资源(如网站的一个页)时,将动态编译 ASP.NET 网页和代码文件.第一次编译页和代码文件之后,会缓存编译后的资源,这样将大大提高随后对同一页提出的请求的效率. ASP.N ...

  7. 关于c++预编译符的使用

    (该内容是在观看了孙鑫老师的MFC教程后,觉得有必要记录的) 在学习c++时,我们经常会用到#include,#define两种预编译符,很简单,前者是一种引用文件的方法,后者是宏定义的方法. 引用文 ...

  8. C#中的预编译指令介绍

    原文:C#中的预编译指令介绍 1.#define和#undef 用法: #define DEBUG #undef DEBUG #define告诉编译器,我定义了一个DEBUG的一个符号,他类似一个变量 ...

  9. java预编译啥意思_java预编译 java jdbc 预编译语句和普通语句的区别

    java中什么是预编译precompile?总有一天你恍然大悟,父母是你花心思,花时间最少,却最爱你的人. 什么是预编译?起什么作用的? . 在java中如何实现预编译?祝你幸福!这句话真俗.小编会祝 ...

最新文章

  1. eclipse 创建maven web 项目
  2. 文件系统损坏导致数据文件异常恢复----惜分飞
  3. 主要技术指标简介_期货常用技术指标(五)布林线
  4. ajax返回JSON时的处理方式
  5. 你真的了解Maven pom.xml 的配置吗?【详解maven pom】
  6. 编程题:带参数的宏定义来实现,求圆的周长和面积。
  7. Java 之HashSet、LinkedHashSet、TreeSet比较
  8. linux备份mysql需要暂停服务吗_【MySQL运维】线上MySQL数据库停服迁移流程
  9. node.js web框架_使用Node.js进行Web爬取的终极指南
  10. 使用 Redis 如何实现延迟队列?
  11. java 调用sqlite_java 调用 sqlite 数据库
  12. C++安全方向(二):2.4 openssl_BIO接口解析
  13. kernel php segfault,php不停报错segfault,求高手帮忙
  14. [CSS]打败 IE 的葵花宝典:CSS Bug Table
  15. ios 访问设备的基本信息
  16. 图:成都第三医院知识竞赛于9月29日圆满结束,PPT题目界面一览
  17. python 微博自动点赞软件_微博超话自动软件-微博超话自动工具(签到+发帖+自动写文案)下载-西西软件下载...
  18. 2款QQ空间首页好看的psd源码
  19. 电力系统建模与仿真, 地理接线图,配电图,电力系统组态与监控,电力调度,自动控制,VBScript脚本控制,JavaScript脚本控制, 潮流分析2018...
  20. 论文翻译《Computer Vision for Autonomous Vehicles Problems, Datasets and State-of-the-Art》(第六章)

热门文章

  1. 2021一建电子教材(各科)
  2. 网线线序如何排列,586B与586A的区别
  3. Unity接IronSource聚合广告sdk 报错 65535
  4. 个人整理的数据集(手写中文数据、发票数据、快递单数据、车牌数据)
  5. 算法分析-子集和数,回溯法
  6. php好看的控件,漂亮的css button样式汇总
  7. NTFS安全权限 3th
  8. 【重磅】Crust详解波卡平行链插槽竞拍机制!
  9. 【PAT甲级】A1001-A1050刷题记录
  10. 把自己的电脑公开到外网