编译之前的处理指令

A.宏定义
a.
 //Like static constant
#define NUM 6 //The truth of macro define is replacing the constant
//Replace "sum(a, b)" with "a+b"
#define sum(a, b) a+b
实质是字符替换
 
b.带参数的宏定义
#define sum(v1,v2) v1+v2
 
但是这种“函数”有缺点
    printf("sum = %d\n", sum(1, 2) * sum(3, 4));
out:
sum = 11
因为宏定义的实质是文本替换,不会进行计算,实际计算是 1 + 2 * 3 + 4
解决:给每个变量、算式加上括号
#define sqr(a) ((a)*(a))
    printf("sqr = %d\n", sqr(5+5));
 
 
B.条件编译
条件成立的时候才进行编译
 #define NUM 1

 int main(int argc, const char * argv[]) {

 #if NUM == 0
printf("");
#elif NUM > 0
printf(">0");
#elif NUM < 0
printf("<0");
#endif printf("\n");
return ;
}
 
C.文件包含
系统自带使用<> #include <stdio.h>
自定义”” #include “mylib.h”
 
使用<>直接到系统目录中寻找资源
使用””先在源程序目录寻找,若找不到再前往系统目录
 
防止多次定义,多次引入:
#ifndef NUM
#define NUM 3
#endif
 
不能循环包含!!
 
 

[C语言 - 5] 预处理的更多相关文章

  1. C语言: 预处理

    1. 字符映射 键盘有多种标准规格,例如常用的IBM 104键盘标准,然而不是所有键盘都能打出像#这样的符号,因此C语言的预处理引入了字符映射机制.如果程序员要求,预处理会按照约定对源代码中的字符进行 ...

  2. C语言之预处理命令

    /**************************************************************************** Title:C之预处理命令 Time:201 ...

  3. R语言数据预处理

    R语言数据预处理 一.日期时间.字符串的处理 日期 Date: 日期类,年与日 POSIXct: 日期时间类,精确到秒,用数字表示 POSIXlt: 日期时间类,精确到秒,用列表表示 Sys.date ...

  4. C语言之预处理详解

    C语言之预处理详解 纲要: 预定义符号 #define #define定义标识符 #define定义宏 #define的替换规则 #与## 几点注意#undef 带副作用的宏参数 宏和函数的对比 命名 ...

  5. C语言之预处理

    这是2016年的最后一篇博客,年初定的计划是写12篇博客,每月一篇,1/3转载,2/3原创,看来是实现不了了! -- 题外话.今天要写的东西是C语言中的预处理器,我们常说的宏定义的用法.为什么要写这个 ...

  6. iOS开发系列--C语言之预处理

    概述 大家都知道一个C程序的运行包括编译和链接两个阶段,其实在编译之前预处理器首先要进行预处理操作,将处理完产生的一个新的源文件进行编译.由于预处理指令是在编译之前就进行了,因此很多时候它要比在程序运 ...

  7. Linux C编程学习之C语言简介---预处理、宏、文件包含……

    C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语 ...

  8. 【C语言入门教程】2.8 C 语言的预处理命令

    预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...

  9. c语言编译预处理和条件编译执行过程的理解

    在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令.预处理命令属于C语言编译器,而不是C语言的组成部分.通过预处理命令可扩展C语言程序设计的环境. 一.预处理的工作方式 1.1. ...

  10. C语言的预处理命令

    C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件.在预处理时编译器做了一些展开替换的处理. 1>头文件展开,即将#include "stdio.h"类 ...

随机推荐

  1. freemarker判断记录集是不是为空

    #if($personals)这样写 直接把记录标识符放在if里面就可以了

  2. JAVA调用易信接口向指定好友推送消息(一)背景需求

    众所周知,中国电信内部一直使用易信群进行交流 各种工作交流都在易信群里面沟通 包括投诉处理,障碍报修,拍照上传 最重要的就是每天甚至每个时点的指标完成情况的通报 所以只能用4个字来形容 String ...

  3. UVa 11427 (期望 DP) Expect the Expected

    设d(i, j)表示前i局每局获胜的比例均不超过p,且前i局共获胜j局的概率. d(i, j) = d(i-1, j) * (1-p) + d(i-1, j-1) * p 则只玩一天就就不再玩的概率Q ...

  4. li添加浮动时不能完全包裹的方法

    <html> <head> <meta http-equiv="Content-Type" content="text/html;chars ...

  5. UVA 11294 Wedding(2-sat)

    2-sat.不错的一道题,学到了不少. 需要注意这么几点: 1.题目中描述的是有n对夫妇,其中(n-1)对是来为余下的一对办婚礼的,所以新娘只有一位. 2.2-sat问题是根据必然性建边,比如说A与B ...

  6. I.MX6 bq27441 driver porting

    /************************************************************************** * I.MX6 bq27441 driver p ...

  7. ORACLE 远程连接数据库

    通过运行->cmd->sqlplus/nolog 登录sqlplus时,突然间提示“sqlplus不是内部或外部命令,也不 是可运行的程序或批处理文件”,如下图: 分析后感觉不可能啊,因为 ...

  8. iOS AFNetworking的使用

    转:http://www.cnblogs.com/lookenwu/p/3927897.html AFNetworking几乎是iOS上最常用的HTTP库了,AFNetworking也确实用起来简单, ...

  9. IO负载高的来源定位

    前言: 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的util),但是无法快速的定位到IO负载的来源进程和来源文件导致无法进行相应的策略来解决问题. 这个现象在MySQ ...

  10. POJ 3067 Japan

    Japan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25489   Accepted: 6907 Descriptio ...