常用的预处理,预处理流程
Yyds干货库存
@TOC
1.预处理符号
#包含stdio.h
int main()
printf(%s\n ,_ _ FILE _ _);//输出文件的具体位置。
printf(%d\n ,_ _ LINE _ _);//行号,所以使用%d
printf(%s\n ,_ _ DATE _ _);//当前日期。
printf(%s\n ,_ _ TIME _ _);//当前时间。
}
第二,#定义函数
1.#定义定义符号
(1).定义为常数
定义常量时,将宏替换到代码中是在预处理阶段。
#定义M 1000
#包含stdio.h
int main()
int ret=M;
printf(%d\n ,ret);
返回0;
}
(2).为关键字创建一个短名称
#定义寄存器寄存器
#包含stdio.h
int main()
reg int sum=1000
返回0;
(3).用符号替换实现
# deifne do _ forever;)
int main()
do _永远;//for(;);死循环
返回0;
}
(4).在#define后添加一个加号
#定义M 1000
int()//这里程序会报告一个错误
int a=5;
int b=8;
如果(10分)
a=M;//这里宏替换为a=1000;多个分号组成一个语句,多个语句需要括号。
其他
b=0;
返回0;
}
2.#定义定义宏
(1)机制
(2).宏语句的方式
#定义名称(参数列表)内容
这里要记住名字是靠近左括号的,否则会被当作转换的东西的一部分。
(3)练习
注意手术前要整体传递。
#定义正方形(x) x*x
int main()
printf(%d\n ,square(3 ^ 1));//3 ^ 1传递它来替换x 3 1 * 3 1=7
返回0;
}
#定义正方形(x) x x
int main()
printf(%d\n ,10 * square(4));//传4替换X,即10 * 4 ^ 4=44
返回0;
}
#函数是查找这个对象对应的内容的字符串。
# define PRINT printf( # x 的值是%d\n ,x)
int main()
int a=10
打印(一份);
int b=5;
打印(b);
返回0;
}
只要是字符串,不管多少都可以正常输出。
#x表示对应于x的内容的字符串。
用A/B替换#x。
printf(a的值为%d\n,a);
# #表示将两个字符连接在一起。
#定义cat(x,y) x##y
int main()
int yourage=20
printf(%d\n ,cat(your,age));//把你的和年龄连起来就是你的年龄,然后算到20。
返回0;
}
你的#你的# #年龄-你的年龄
第四,有副作用的宏观参数
#定义max(x,y) x y?x:y
int main()
int a=5;
int b=8;
int ret=max(a,b);
printf(%d\n ,ret);
返回0;
}
在宏中将A和B替换为“as”
一个b?甲:乙
A 5 b等于8
5是假表情的结尾。两者都加1 a,6 b加9。
b在传入b中给ret,即ret为9。
表达式结束后,B加1意味着B是10。
动词(verb的缩写)宏和函数的比较
不及物动词条件编译
1.#undef
用于删除宏定义。
#定义M 1000
int main()
int a=M;
#不知道
printf(%d\n ,M);//这里会报错,因为M的宏定义已经被移除了
返回0;
}
2.移除效果与//相同
#ifdef 0
#定义M 1000
int main()
int a=M;
printf(%d\n ,a);
返回0;
#endif
如果#ifdef 0 0为false,则不执行下面的内容相当于//。
3.编译多个分支条件
#包含stdio.h
int main()
#ifdef 1==1//1==1如果为真,执行以下内容输出呵呵。
printf(呵呵\ n );
#elif 1==2//如果为假,则跳过以下内容
printf(呵呵\ n);
#else//都无效。执行呵呵
printf(呵呵\ n );
#endif
返回0;
4.确定它是否已定义。
#定义打印
int main()
#ifdef打印
printf(呵呵\ n );//如果PRINT未定义,则不参与编译
#endif
返回0;
}
。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。