欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#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