#define
程序员文章站
2024-03-22 10:59:34
...
预定义符号 #define
例1:
#define MAX_SIZE 20
#define 用于替换文本代码
#define MAXSIZE 20
void main()
{
char str[MAXSIZE];
}
编译器在处理这个代码之前会对MAXSIZE进行处理,替换为20。
例2:
替换参数
#define DOUBLE(x) ((x)+(x))
#define DOUBLE(x) ((x)+(x))
void main()
{
int apple = 10;
printf("%d\n",DOUBLE(apple));
}
当宏被调用时,名字后面是一个由逗号分隔的符号列表,每个值都与宏定义中的一个参数相对应,整个列表用一对括号包围。当参数出现在程序中时,与每个参数对应的实际值都将被替换到宏名中。
为避免宏对附近的代码产生影响,应在左右两侧加上括号。
例3:
创建一个死循环代码。
#define do_forever while(1);
#define do_forever while(1);
int main()
{
printf("HelloWorld!");
do_forever
return 0;
}
例4:
写一个多行的宏定义
#define LOOP
for(i=0;i<10;i++)
{
sum+=i;
}
#define LOOP
for(i=0;i<10;i++) \
{ \
sum+=i; \
}
*除最后一行外,每行加上 *
## 在此,我们约定,把宏名全部大写。
#undef 用于移除一个宏定义。
如果一个现存的名字需要重新定义,则需要先用#undef移除
例5:
#include<stdio.h>
#define MAX 10
#undef MAX
#define MAX 20
int main()
{
char a[MAX];
printf("%d",sizeof(a));
return 0;
}
**例6:
#if #endif**
在编译时,可以选择某条语句进行编译或者被忽略。
#if (1==DEBUG)
printf("OK\n");
#elif ( 2==DEBUG)
printf("YES");
#else
printf("NO");
#endif
除此之外,还有#ifndef/ #define /#endif*,用于防止重复引用同一个头文件,减轻编译负担。
其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include “a.h” 和#include "c.h"此时就会造成c.h重复引用。
例如:
#ifndef math.h
#define math.h
#endif
上一篇: java实习生面试-2021-7-27
下一篇: JAVA实习生面试笔记(一)