[C语言 - 5] 预处理

编译之前的处理指令

A.宏定义

a.

1 //Like static constant
2 #define NUM 6
3
4 //The truth of macro define is replacing the constant
5 //Replace "sum(a, b)" with "a+b"
6 #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.条件编译

条件成立的时候才进行编译

 1 #define NUM 1
 2
 3 int main(int argc, const char * argv[]) {
 4
 5 #if NUM == 0
 6     printf("0");
 7 #elif NUM > 0
 8     printf(">0");
 9 #elif NUM < 0
10     printf("<0");
11 #endif
12
13     printf("\n");
14     return 0;
15 }

C.文件包含

系统自带使用<> #include <stdio.h>

自定义”” #include “mylib.h”

使用<>直接到系统目录中寻找资源

使用””先在源程序目录寻找,若找不到再前往系统目录

防止多次定义,多次引入:

#ifndef NUM

#define NUM 3

#endif

不能循环包含!!

时间: 2024-10-01 07:53:12

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

从头开始-06.C语言中预处理指令

预处理指令 不带参数的宏定义: 格式: #define 宏名 值 作用:提高代码的可读性 在程序编译前把所有出现宏名标示的位置都替换为定义宏的时候,宏名后面的值 带参数的宏定义 格式 #define 宏名(参数列表) 参数表达式 作用:在编译之前,把所有出现宏名(x)地方,都替换成把 参数代入参数表达 我写带参数的宏定义的时候,需要把每一个参数和结果都使用()扩起来 条件编译: 格式: #if #elif #else #endif 作用:当条件满足的时候就编译它后的语句 注意点:条件编译必须以#

C语言宏预处理帮助文档

GCC4.10预处理器帮助文档 The C Preprocessor Transformations Made Globally Most C preprocessor features are inactive unless you give specific commands to request their use. (Preprocessor commands are lines starting with `#'; see section Preprocessor Commands).

黑 马 程 序 员_视频学习总结&lt;C语言&gt;----04 预处理指令

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 3.预处理指令可以出现在程序的任何位置,它的

C语言之预处理命令

/**************************************************************************** Title:C之预处理命令 Time:2014年7月26日 **************************************************************************/ 大一时学过,C语言中预处理命令功能分为3种.(宏定义,文件包含和条件编译) 一:宏定义 格    式       #define  

C 语言之预处理 ---------文件包含

文件包含是C预处理程序的另一个重要功能.文件包含命令行的一般形式为: #include"文件名" 在前面我们已多次用此命令包含过库函数的头文件.例如: #include"stdio.h" #include"math.h" 文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件. 在程序设计中,文件包含是很有用的. 一个大的程序可以分为多个模块,由多个程序员分别编程. 有些公用的符号常量或宏

C 语言 之 预处理-------- 宏定义

1 概述 使用过以"#"号开头的预处理命令.如包含命令# include,宏定义命令# define等.在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理部分. 所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理是C语言的一个重要功能, 它由预处理程序负责完成.当对一个源文件进行编译时, 系统将自动引用预处理程序对源程序中的预处理部分作处理, 处理完毕自动进入对源程序的编译. C语言提供了多种预处理功能,如宏定义.文件包含. 条

IOS开发系列--C语言之预处理

概述 大家都知道一个C程序的运行包括编译和链接两个阶段,其实在编译之前预处理器首先要进行预处理操作,将处理完产生的一个新的源文件进行编译.由于预处理指令是在编译之前就进行了,因此很多时候它要比在程序运行时进行操作效率高.在C语言中包括三类预处理指令,今天将一一介绍: 宏定义 条件编译 文件包含 宏定义 对于程序中经常用到的一些常量或者简短的函数我们通常使用宏定义来处理,这样做的好处是对于程序中所有的配置我们可以统一在宏定义中进行管理,而且由于宏定义是在程序编译之前进行替换相比定义成全局变量或函数

C语言之预处理

1 #define name value 我再学习预处理直接的驱动力是看了php的源码,开头一大推的宏定义器,之前'掌握'的一点#define的用法太少了,根本看不懂源码中宏的处理逻辑和运行的路径.所以再学习预处理器很有必要,里面好多东西其实并不难,只是你没有接触到,等你学习了,就感觉容易了. 一.宏定义和使用中的坑 这小节采用先给代码再说明的形式,这样你可以看看每个代码的运行结果是否和你预期的一致! 宏是什么,宏就是#define机制把指定的参数替换的文本中,这样的实现方式就是宏.使用宏定义可

C语言三)预处理指令

一.预处理指令 1.定义 C语言在对源程序进行编译之前,会先对一些特殊的预处理指令做解释,如:#include,产生一个新的源程序,这个过程称为"编译预处理",之后再进行通常的编译工作. 2.作用范围 预处理指令可以出现在程序的任意位置,它的作用范围是从它出现的位置到文件末尾.习惯上,我们把预处理指令写在源程序开头. 3.类型 C语言提供了预处理指令主要有:宏定义.文件包含和条件编译. 二.不带参数的宏定义 1.一般形式 #define 宏名 字符串 如:#define A 10; /

C语言的预处理代码

C语言主要有三种预处理功能:1.文件包含#include 2.宏定义#define 3.条件编译#if  #ifdef等. 预处理是程序在被编译器编译以前,由预处理器预先进行的处理.预处理代码含有"#"作为符号标志,以区分其他源代码. 预处理好处主要是方便提高程序的可读性的维护性,方便开发人员开发代码,还可以提高编译的效率. 预处理的过程主要是指示预处理程序如何修改源代码.在对程序进行通常的编译处理之前,编译程序会自动运行预处理程序,对程序进行编译前的预处理. 比如说当使用#inclu