【注:本程序验证是使用vs2013版】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
/*
#define
1、定义一个标识符来表示一个常量。
2、特点:定义的标识符不占变量内存,占用的是程序空间的内存,预编译后这个符号就不存在了。
3、预编译所执行的操作就是简单的“文本”替换
4、使用:#define 标识符 常量 //注意, 最后没有分号
#undef M //宏的中止位置
*/ /*
1、宏只是简单的替换,在预编译时将程序中出现前面的内容,用后边的完全替换
*/
# define NUM // #undef 之前出现的 NUM 全部用5代替
#define b "at" //"at" 会在程序会完全替代 b
/*
#define c "at 宏定义也不是说后面东西随便写,不能把字符串的两个""拆开。
#define 0x abcd 宏定义前面的那个必须是合法的用户标识符
*/ /*
2、带参的宏,
每个宏变量都要加括号 遇到MAX(1+2,value)则会把它替换成:((1+2)>(value)?(1+2):(value))
如果不括起来, 遇到MAX(1+2,value)则会把它替换成: 1+2>value?1+2:value 这样什么运算都不是了,会报错
*/
#define MAX(a,b) ((a)>(b)?(a):(b)) /*
3、'#'用于把宏定义中的参数两端加上字符串的""
比如,这里STR(my#name)会被替换成"my#name"
一般由任意字符都可以做形参,但以下情况会出错:
STR())这样,编译器不会把“)”当成STR()的参数。
STR(, )同上,编译器不会把“, ”当成STR的参数。
STR(A, B)如果实参过多,则编译器会把多余的参数舍去。(VC++2008为例)
STR((A, B))会被解读为实参为:(A, B),而不是被解读为两个实参,第一个是(A第二个是B)。
*/
#define STR(str) #str /*
4、‘##’用于实现函数实参中多个参数的 使用
例如:#define FUN(a,b) vo##a##b()
那么FUN(id ma,in)会被替换成void main()
*/ /*
5、多行宏定义
#define doit(m,n) for(int i=0;i<(n);++i)\
{\
m+=i;\
}
*/ int main(void){
int a= NUM;
printf("a=%d\n",b);
  
#undef NUM
  //int a2= NUM; //这里再使用NUM就会报错

    printf("%s\n", b);
   printf("MAX(1,2) = %d\n",MAX(,));
   printf("\n");
system("pause");
return ;
}

最新文章

  1. 苹果公布WWDC2016时间 并做了个程序员情怀网页
  2. mysql和oracle jdbc连接
  3. Response.Redirect()、Server.Execute和Server.Transfer的区别
  4. struts2 标签为简单标签
  5. winform form
  6. TSQL基础(三)
  7. MenuItem
  8. 转载MSDN 在ASP.NET 中执行 URL 重写
  9. BZOJ 1629: [Usaco2007 Demo]Cow Acrobats
  10. Web---图片验证码生成教程详解-从简单到复杂-从本地到前后台
  11. 关于__irq 的使用
  12. 安装完Apache和PHP之后访问PHP文件页面提示下载而没有解析 解决办法
  13. 对list代理扩展功能
  14. MacBook USB Type-C接口很美?其实是缩水的!
  15. 【STL】reverse函数用法
  16. Flutter 布局(五)- LimitedBox、Offstage、OverflowBox、SizedBox详解
  17. 配置SAP GUI FOR HTML(通过WEB方式登录)
  18. eclipse使用struts2找不到action方法或找不到action的错误记录
  19. identity一些接口
  20. Properties (25)

热门文章

  1. ShardingSphere初探1 -- 概览
  2. zeptojs库
  3. ServiceStack.OrmLite 基本操作
  4. Ajax 的一些概念 解析
  5. 第12组 Beta测试(5/5)
  6. RPC接口测试(三) RPC接口测试
  7. oracle远程连接服务器
  8. Chrome DevTools 之 Network,网络加载分析利器
  9. Nginx 配置 stream SSL 第四层 代理
  10. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存