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预处理器的更多相关文章

  1. 前端CSS预处理器Sass

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  2. css预处理器sass使用教程(多图预警)

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

  3. C和指针 第十四章 预处理器 头文件

    编写一个C程序,第一个步骤称为预处理,预处理在代码编译之前,进行一些文本性质的操作,删除注释.插入被include的文件.定义替换由#define定义的符号,以及确定代码的部分内容是否应该按照条件编译 ...

  4. 关于前端CSS预处理器Sass的小知识!

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  5. CSS预处理器Sass、LESS 和 Stylus

    CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...

  6. C#预处理器指令 ,你造吗??? (●'◡'●)

    什么是c#预处理指令?? 用于在 C# 源代码中嵌入的编译器命令. C#预处理器指令有哪些?? ↓↓↓这些就是预处理器指令啦 下面我们一一道来(●'◡'●) 1.#if ,#elif,#else,en ...

  7. Myth – 支持变量和数学函数的 CSS 预处理器

    Myth 是一个预处理器,有点类似于 CSS polyfill .Myth 让你写纯粹的 CSS,同时还让你可以使用类似 LESS 和 Sass 的工具.您仍然可以使用变量和数学函数,就像你在其它预处 ...

  8. Harp – 内置常用预处理器的静态 Web 服务器

    Harp 是一个基于 Node.js 平台的静态 Web 服务器,内置流行的预处理器,支持把 Jade, Markdown, EJS, Less, Stylus, Sass, and CoffeeSc ...

  9. Koala – 开源的前端预处理器语言图形编译工具

    koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...

  10. CSS 预处理器(框架)初探:Sass、LESS 和 Stylus

    现在最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 拿less来说,可以在页面上直接使用less文件,但要引用less.js进行解析:同时也可以直接将less ...

随机推荐

  1. Epic - Decimal Number

    Let the user enter a decimal number. Therange allowed is 0.0001 to 0.9999. Only four decimal places ...

  2. MFC CString的L和_T

    这个问题困扰了很久,这个解释貌似好理解一些 L表示UNICODE串,比如wchar_t* str = L"yangsongx";_T在ANSI编译模式下表示ANSI串,在UNICO ...

  3. C语言基础(不断更新)

    1.memcpy. memmove.memccpy的区别 字符串函数功能查询 memcpy要求源串和目的串不能重叠 memccpy:copy直至遇到由参数指定的ch. memmove: 源串和目的串可 ...

  4. Android Audio遇到播放无声时的分析

    在Android Audio开发过程中,有遇到播放ringtone时无声,但播放Music可以听到声音,关于无声问题的分析,在此做个笔记,方便以后回顾. 分析方向: 1:在音量控制面板中确认该音频流对 ...

  5. Hadoop入门简介

    一.Hadoop简介 1.1.Hadoop主要进行分布式存储和分布式计算 1.1-1.HDFS:分布式文件系统 1.1-2.MapReduce:并行计算框架 1.2.Hadoop用来做什么? 搭建大型 ...

  6. Java基础 —— JavaScript

    Javascript:基于对象与事件驱动的脚本语言,主要用于客户端 特点: 交互性:信息动态交互. 安全性:不能访问本地硬盘. 跨平台性:只要有浏览器就支持Javascript,与平台无关. Java ...

  7. java 编写hadoop程序中使用第三方libxx.so库

    在使用java编写hadoop处理程序时遇到了,java使用依赖的第三方libxx.so库的情况,找到了一种可行的方法,记录一下,希望对别人也有帮助: 加入需要使用的lib库为libxxx.so 1. ...

  8. Linux配置静态IP

    在一块SSD的CentOS配置静态IP 1. 配置静态IP #vi /etc/sysconfig/network-scripts/ifcfg-eth0   DEVICE="eth0" ...

  9. Android NDK调试C++源码(转)

    [原创文章,转载请保留或注明出处,http://download.csdn.net/download/bigmaxim/5474055] 1. 相关软件 adt-bundle-windows-x86. ...

  10. Linux下的设置静态IP命令详解

    网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为ifcfg-后面跟的就是网卡的名称,可以通过双TAB键查看然后编辑,也可以使用ifconfig查看,也 ...