99网
您的当前位置:首页[C++]#define 和 #undef

[C++]#define 和 #undef

来源:99网

概述

#define是C/C++语言的一个预处理指令,用来定义一个宏,编译器在预处理的时候会先替换掉所有的宏,然后再进行编译。#undef用来解除宏定义,解除后,这个宏定义就不存在了。

#define的语法

#define identifier replacement-list (optional)	            (1)	
#define identifier ( parameters ) replacement-list	    (2)	
#define identifier ( parameters, ... ) replacement-list	    (3)	(since C99)
#define identifier ( ... ) replacement-list	            (4)	(since C99)
#undef identifier  	                                    (5)	

#define定义的宏可以分为两类:

  • 类对象的宏(Object-like macros)
  • 类函数的宏(Function-like macros)

类对象的宏(Object-like macros)

语法中的(1)就是类对象的宏的形式,比较直观,就是把代码中的所有的identifier都替换成replacement-list

类函数的宏(Function-like macros)

类函数的宏在进行替换时,要把相应的参数也替换到对应的位置。

#undef

#undef用来解除宏定义,从#undef开始,这个宏就失效了。

例子

Example 1

// C Program to illustrate how to use #define to declare 
// constants 
#include <stdio.h> 

// Defining macros with constant value 
#define PI 3.14159265359 

int main() 
{ 

	int radius = 21; 
	int area; 

	// Using macros to calculate area of circle 
	area = PI * radius * radius; 

	printf("Area of Circle of radius %d: %d", radius, area); 

	return 0; 
}

Output

Area of Circle of radius 21: 1385

Example 2

// C Program to define the function like macros using 
// #define 
#include <stdio.h> 

// Defining parameterized macros with expression 
#define CIRCLE_AREA(r) (3.14 * r * r) 
#define SQUARE_AREA(s) (s * s) 

int main() 
{ 

	int radius = 21; 
	int side = 5; 
	int area; 

	// Using macros to calculate areas by 
	// passing argument 
	area = CIRCLE_AREA(radius); 
	printf("Area of Circle of radius %d: %d \n", radius, 
		area); 

	area = SQUARE_AREA(side); 
	printf("Area of square of side %d: %d", side, area); 

	return 0; 
}

Output

Area of Circle of radius 21: 1384 
Area of square of side 5: 25

Example 3

#include <stdio.h>
 
// make function factory and use it
#define FUNCTION(name, a) int fun_##name(int x) { return (a) * x; }
 
FUNCTION(quadruple, 4)
FUNCTION(double, 2)
 
#undef FUNCTION
#define FUNCTION 34
#define OUTPUT(a) puts( #a )
 
int main(void)
{
    printf("quadruple(13): %d\n", fun_quadruple(13) );
    printf("double(21): %d\n", fun_double(21) );
    printf("%d\n", FUNCTION);
    OUTPUT(billion);               // note the lack of quotes
}

Output

quadruple(13): 52
double(21): 42
34
billion

因篇幅问题不能全部显示,请点此查看更多更全内容