宏表达式与函数、#undef、条件编译、
宏表达式在预编译期被处理,编译器不知道宏表达式的存在。
宏表达式没有任何的调用开销
宏表达式中不能出现递归定义。
C语言中强大的内置宏
__FILE__:被编译的文件名 //双底线
__LINE__:当前行号
__DATE__:编译时的日期
__TIME__:编译时的时间
__STDC__:编译器是否遵循标准C规范 eg:printf("%s,%d Enter main()...\n",__FILE__,__LINE__);
注意:宏定义对空格比较敏感
#define f (x) ((x)-1)//Error,定义了个f,它需要被替换为x,但后面又有个((x)-1)没有任何意义
#undef 取消前面定义的宏
#undef _MIN_
条件编译是预编译指令命令,用于控制是否编译某段代码。
条件编译的意义:
1.条件编译使得我们可以按不同的条件编译不同的代码段,因而可以产生不同的目标代码。
2.#if...#else....#endif被预编译器处理;而if...else语句被编译器处理,必然被编译进目标代码。
#error的用法:
#error用于生成一个编译错误信息,并停止编译。
语法:#error message //注:message不需要用双引号包围
#pragma message
message参数在大多数的编译器中都有相似的实现
message编译时输出信息到编译输出窗口中
message可用于代码的版本控制
#pragma message("compile Android ADK 2.0...")
宏表达式与函数、#undef、条件编译、的更多相关文章
- c语言的预处理指令分3种     1> 宏定义     2> 条件编译     3> 文件包含
		宏简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 所有的预处 ... 
- js函数表达式和函数声明的区别
		我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ... 
- js基础:函数表达式和函数声明
		函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ... 
- javascript函数定义表达式和函数声明的区别
		在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ... 
- c宏的MAX函数
		今天从香山上面回来累的跟傻逼一样,回来问了一下胡总的阿里面试的问题.然后其中有一个是宏写max函数.胡总说不好写,然后我就去洗澡了. 洗澡的时候感觉不对啊,回来写了一个: #define MAX(a, ... 
- [转]javascript函数定义表达式和函数声明的区别
		在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ... 
- javascript 用函数语句和表达式定义函数的区别详解
		通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) { console.log(str); }; // 表达式定义 var fnx=function(str) { ... 
- 第七章  函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法
		一:函数表达式和函数声明 1:函数声明和函数表达式的区别 ①函数声明不需要分号结尾 ②函数声明有函数提升的特点 ③函数声明后面不能跟圆括号直接调用,因为javascript将function关键字当作 ... 
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例  如何定义函数式接口
		函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ... 
随机推荐
- 关于为空必填js判断
			为了减少一不必要的if逻辑判断,自已写了一个方法 $(function () { $("#btnAdd").click(function () { var strLinValu = ... 
- mysql -- 预处理语句
			所谓预处理,即在真正执行某条SQL语句之前,先将SQL语句准备好,在执行过程中再绑定数据 语法: 准备预处理 prepare 预处理名字 from ‘要执行的SQL语句’ 执行预处理 execute ... 
- pip下载默认绕过代理
			centos7下使用pip7.1.0安装软件,在shell下设置了全局http_proxy和https_proxy,但是每次都遇到网络超时问题, 后来使用pip install xxx --proxy ... 
- 织梦dedecms整合discuz论坛的操作方法
			织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ... 
- Hibernate 自动生成数据库表
			http://blog.csdn.net/u010096526/article/details/50533428 
- python+selenium之自定义封装一个简单的Log类
			python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ... 
- 一个简单的ServletContextListener示例
			ServletContext可以初始化String类型的参数.但是,如果你希望应用初始化参数是一个数据库DataSource呢?上下文参数只能是String.毕竟,你不能把一个Dog对象塞到XML部署 ... 
- 【BZOJ4598】[Sdoi2016]模式字符串 树分治+hash
			[BZOJ4598][Sdoi2016]模式字符串 Description 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每 ... 
- HighCharts使用心得(转载)
			转载自:http://www.cnblogs.com/Olive116/p/3777021.html 1. 准备工作------下载HighCharts插件 跟ECharts一样,HighChart ... 
- nginx提高加载静态文件速度
			1.本来对于静态网页,我们不需要放在应用容器中,原因一时由于应用服务器是用来解析动态网页的,针对静态网页本来就性能不高,而且还会占用应用容器的资源,所以我们专门使用nginx用来解析静态网页. ... 
