C预处理器
C预处理器
目录
- 概述
- 文件包含
- 宏替换
- 条件包含
概述
预处理器是编译过程中单独执行的第一个步骤
文件包含
#include "文件名" / #include <文件名>
注:
文件包含将被替换为由文件名指定的文件内容
如果某个包含文件的内容发生了变化,那么所有依赖于该包含文件的源文件都必须重新编译
宏替换
书写格式:#define 名字 替换文本
注:
宏定义若分成多行,此时需要在行末尾加上一个反斜杠符\
#define指令定义的名字的作用域从其定义点开始,到被编译的源文件的末尾处结束,宏定义中也可以使用前面出现的宏定义
宏定义带参数
要适当使用圆括号以保证计算次序的正确性
#undef指令取消名字的宏定义
举例
#define max(A, B) ((A) > (B) ? (A) : (B))
max(z+1)
max(i++, j++) //将对每个参数执行两次自增操作
常量的宏定义
举例说明
#define PI 3.14 //浮点类型
#define doublePI 2*PI //宏定义中可以使用先前定义过的宏
注意事项
在结尾不能使用“;”分号,否则会编译报错
函数的宏定义
带参函数的宏定义
#define showText(number) printf("number is %d",number)
给宏定义的函数增加一个参数作为函数的返回值
#define getReturnValue(numA,numB,returnValue) if(numA>numB) returnValue = numA; else returnValue = numB;
宏定义时如果想通过换行来提高代码的可读性,此时在行的末尾需要使用“ \ ”
例如
#define changedLine() \
if(10<20){\
printf("hello");\
}
注意
函数的宏定义是不可以有返回值的
函数宏不可以赋值给一个变量,例如:int a = macro(); 这种写法是错误的
宏定义的运用
把一些常用的变量或方法以宏定义的形式放在代码中,一方面可以提高代码的可读性(注意对宏的命名,让人能够一目了然这个宏是干什么用的),另一方面可以提高开发效率(不用重复定义一些常用的变量或方法)
问题研究
函数的宏定义在末尾是否要用”;“
宏定义的函数传入的参数类型程序是怎么做判断的;
条件包含
#if、#endif、#elif(类似于else if)或#else
#ifdef、#ifndef
注:
#if语句中可以使用表达式defined(名字),当名字已经定义时,其值为1;否则其值为0
举例
保证hdr.h文件的内容只被包含一次,避免多次重复包含同一文件
#if !defined(HDR)
#define HDR
/* hdr.h文件的内容放在这里 */
#endif
改写:
#ifndef HDR
#define EDR
/* hdr.h文件的内容放在这里 */
#endif
测试系统变量SYSTEM,根据该变量的值确定包含哪个版本的头文件
#if SYSTEM == SYSV
#define HDR "sysv.h"
#elif SYSTEM == BSD
#define HDR "bsd.h"
#else
#define HDR "default.h"
#endif
#include HDR
C预处理器的更多相关文章
- 前端CSS预处理器Sass
前面的话 "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...
- css预处理器sass使用教程(多图预警)
css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...
- C和指针 第十四章 预处理器 头文件
编写一个C程序,第一个步骤称为预处理,预处理在代码编译之前,进行一些文本性质的操作,删除注释.插入被include的文件.定义替换由#define定义的符号,以及确定代码的部分内容是否应该按照条件编译 ...
- 关于前端CSS预处理器Sass的小知识!
前面的话 "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...
- CSS预处理器Sass、LESS 和 Stylus
CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...
- C#预处理器指令 ,你造吗??? (●'◡'●)
什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...
- Myth – 支持变量和数学函数的 CSS 预处理器
Myth 是一个预处理器,有点类似于 CSS polyfill .Myth 让你写纯粹的 CSS,同时还让你可以使用类似 LESS 和 Sass 的工具.您仍然可以使用变量和数学函数,就像你在其它预处 ...
- Harp – 内置常用预处理器的静态 Web 服务器
Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...
- Koala – 开源的前端预处理器语言图形编译工具
koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...
- CSS 预处理器(框架)初探:Sass、LESS 和 Stylus
现在最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 拿less来说,可以在页面上直接使用less文件,但要引用less.js进行解析:同时也可以直接将less ...
随机推荐
- 黑马程序员——OC与C语言的异同比较
1. 文件介绍:Objective-C 也使用头文件(header files),后缀为 .h, 但使用 .m(即 message, 其他面向对象编程语言也叫 method),作为源文件的后缀. ...
- C++中string 的使用
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持 ...
- 使用VMware10虚拟机安装Linux系统(能力工场)
作为IT从业人员,我们经常使用到Linux系统,但是实际开发过程我们通常在Windows平台操作,为了满足工作需要,这个时候我们通常在windows平台安装虚拟机,并在其上建立linux系统,这样就极 ...
- 正整数N是否是素数
来自:[数据结构与算法分析——C语言描述]练习2.13 问题描述: a. 编写一个程序来确定正整数N是否是素数. b. 你的程序在最坏的情形下的运行时间是多少(用N表示)? c. 令B等于N的二进制表 ...
- 把数组A的奇数放在左边,偶数放在右边
这也是一道面试题,是不是easy到爆,但是渣渣我面试时一点算法状态都没有 这道题和上一篇博客里那道题的解法一模一样 # include <iostream> using namespace ...
- ef6 code first
http://www.cnblogs.com/Bce-/p/3684643.html http://www.cnblogs.com/Gyoung/tag/Entity%20Framework/ htt ...
- Operation not applicable
ClientDataSet.DataSetProvider1 Operation not applicable ClientDataSet1->Open(); 解决办法 1.update new ...
- JXTA中定义自己的成员服务
http://blog.csdn.net/neusoftware_20063500/article/details/4302903 —————————————————————————————————— ...
- [转载]开机出现A disk read error occurred错误
[此文章转载] 今天维修了一台机器,郁闷之极.最开始一直无法正确安装操作系统,一安装总是提示文件无法写入内存.换了光盘.光驱都无济于事,忽然意识到是不是内存的问题,随即找了一个内存来,替换了一下,更郁 ...
- 找回使用过的QQ头像
多么渴望那双眼睛能在万紫千红中发现自己:然而眼睛从来就不曾对自己留意:于是换种落寞再次接受垂直打击:然后然后的然后尼玛再换个逗比的头像证明老资无所谓老资无所谓嘿嘿: 我们换头像的时候,发现之前的一个最 ...