老师上课有讲,但是教材没有。所以在此作笔记记录。
宏常量
#define A 10
#define STR "数字:"
printf("%s%d",STR,A);
输出结果——数字:10
宏语句
#define PRINT printf("数字:10");(此处如果有分号,则在调用时不用分号。没有就要分号)
输出结果——数字:10
宏函数
#define PRINT(str) printf("%s",str)
PRINT("数字:10");
输出结果——数字:10
undef撤销宏定义
#define A 10
…………
…………
#undef A
以下A的定义就失效了
ifndef防止重复包含和编译
#ifndef <标识>——如果没有定义执行#define及其下面语句
#define <标识>
……
……
#endif——如果之前定义了,不执行#define,直接跳到#endif
标识的书写规则:一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线
#ifndef _STDIO_H_
ifdef
上文的ifndef全称应是——if not def,所以ifdef即如果定义了就执行其下语句
#ifdef
……
#else
……
#endif
换行符\
#define PRINT printf("1");\
printf("2");
注意换行符前的分号,因为你在调用时,只能在宏的末尾加分号,所以换行符前要有分号
字符串化#
#define PRINT(str)\
{\
printf(#str"的值是%d",str);\
}
int main()
{
int x=1;
int y=2;
PRINT(x+y);
}
输出结果为:x+y的值是3
当#出现在宏中时,它会将后面的参数转换成字符串
片段连接符##
#define A(m,n)\
{\
num##m+=n;\
}
int main()
{
int num1=1;
int m=1;
int n=1;
A(m,n);
}
num1的值最后为2
##就是强制连接符,在上述代码中num##m——num1