宏的实例总结
来源:互联网 发布:免费越狱软件 编辑:程序博客网 时间:2024/06/11 22:35
一、定义:
define 宏名 标识符
列:#define PRINE\
printf(“Hello\n”)
1、宏名通常要大写
2、标识符后一般不要加“;”防止出错
3、当一行写不下时可使用续行符(“\”),但续行符后不可输入空格和注释。
4、宏的参数与类型无关,可以为任何类型
5、宏相当于直接替换掉相关的代码,执行速度快。
6、宏定义中可以有其他的宏定义,但不可出现递归造成死循环。
8、宏的替换是在预处理时实现的,可以在linux环境中运行查看
代码实例解析:
//二进制奇偶位交换#include<stdio.h>#include<stdlib.h>#define CHANGE(num)\(((num&(0x55555555))<<1)|((num&(0xAAAAAAAA))>>1))//二进制奇偶位交换//0x5555 5555=0101 0101 0101 0101 0101 0101 0101 0101//0xAAAA AAAA=1010 1010 1010 1010 1010 1010 1010 1010 int main(){ int i=0; int n=2; int num=5;//交换的数字 printf("改变前位为\n"); for(i=31;i>=0;i--)//从高位到低位输出二进制位 { printf("%d ",num>>i&1); } num=CHANGE(num); printf("\n改变后位为\n"); for(i=31;i>=0;i--) { printf("%d ",num>>i&1); } system("pause"); return 0;}//求两个数中最大数#include<stdio.h>#include<stdlib.h>#define MAX(num1,num2)\ (num1>num2 ? num1:num2)//求最大数#define MAX1(num1,num2)\ ((num1)>(num2)?(num1):(num2))int main(){ int num1=3; int num2=5; int num3=0; printf("%d\n",MAX(num1,num2)); printf("num1=%d num2=%d num3=%d\n",num1,num2,num3); //同于num3=(num1++)>(num2++)?(num1++):(num2++);比较结束后选择为num2=5赋给num3,后num1+1=4,num2+1=6 num3=(num1++,num2++); printf("num1=%d num2=%d num3=%d\n",num1,num2,num3);//4,6,5 system("pause"); return 0;}//其他相关应用#include<stdio.h>#include<stdlib.h>#define CASE break;//自动在CASE后加break;#define SQUARE(x) x*x//计算两数乘积#define PRINT(FORMATE,VALUE)\ printf("the value is "#VALUE " is " FORMATE "\n",VALUE)//PRINT与(之间不可有空格,'\'是续行符,但'\'后不可有输入空格和注释,#是将宏参数转变成字符串#define ADD_TO_SUM(num,value)\ sum##num=value;//##是合成符号,即将sum与num成在一起成num(num) 即num6=value#define MALLOC(num,type)\ (type *)malloc (num*sizeof(type))//每次动态开辟num个type的类型空间,宏可传递类型int main(){ int num=0; int sum6=0; char *arr[2]; printf("输入数字:"); scanf("%d",&num); switch(num) { CASE 1;//输入1退出 case 2: printf("%d\n",SQUARE(5+1));//5+1*5+1=11 break; case 3: PRINT("%d",10+2);//等同于 printf("the value is " 10+2 " is " %d "\n",10+2) break; case 4: ADD_TO_SUM(6,11); printf("%d\n",sum6); break; case 5: arr[0]=MALLOC(10,char);//给arr[0]开辟10个内存空间 free ;//释放内存空间 break; default: printf("输入错误\n"); break; } system("pause"); return 0;}
//预处理—–去掉注释和替换宏
其他相关应用代码预处理后代码为:
# 3 "hong.c" 2# 13 "hong.c"int main(){ int num=0; int sum6=0; char *arr[2]; printf("输入数字:"); scanf("%d",&num); switch(num) { break; 1; case 2: printf("%d\n",5+1*5+1); break; case 3: printf("the value is ""10+2" " is " "%d" "\n",10+2); break; case 4: sum6=11;; printf("%d\n",sum6); break; case 5: arr[0]=(char *)malloc (10*sizeof(char)); free ; break; default: printf("输入错误\n"); break; } system("pause"); return 0;}
在linux环境中可看预处理后的文件
Linux:常用命令
1、LL—–展开目录
2、cd—————-打开文件夹 列 cd linux
3、pwd ————-显示路径
4、cd..—————返回上一目录
5、mkdir————创建文件夹 列 mkdir linux
6、touch————创建文件 列 touch hong.c
7、gedit————-编写代码 列 gedit hong.c
8、gcc —————编译 列 gcc hong.c
9、gcc -o——– –编译自起生成文件名 列gcc hong.c -o myhong
10、./myhong———-运行myhong
11、gcc -E hong.c -o hong.i—–生成预处理文件(-o 自起生成文件名)
12、gcc -S hong.c -o hong.s—-生成汇编文件
13、gcc -c hong.c -o hong.o–生成二进制文件
14、gcc hong.o-o myhong—-链接
15、rm—————-删除文件 列 rm hong.c
16、vim—————显示文件内容 列 vim hong.c
- 宏的实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- ContentProvider的学习实例总结
- contentprovider的学习实例总结
- contentprovider的学习实例总结
- 【源码分析】Opencv-免装OpenCV Manager
- NOIP2017模拟赛 约瑟夫游戏(数学乱搞)
- Web部署应用
- 数据可视化(二)Matplotlib pandas简易入门
- 使用Java语言实现对MySQL数据库的基本操作
- 宏的实例总结
- javascript----原型总结(3)(原型链)
- redis学习系列(十一)--redis-复制功能实践
- aapt命令可以查看包信息
- ID3算法
- An internal error occurred during: "reload maven project". java.lang.NullPointerException
- 数据可视化(三)- Seaborn简易入门
- 008 矩阵性质及习题
- 华为3