C++宏定义需要注意的细节

来源:互联网 发布:人工智能有哪些岗位 编辑:程序博客网 时间:2024/04/25 18:18

#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方

便,并能在一定程度上提高程序的运行效率,但如果我们不需要到一些细节,很容易因

为这个简单的宏定义引发难以预料的问题宏的定义


(1)简单的宏定义:
  1. #define <宏名>  <字符串>
  2. 例: #define PI 3.1415926
(2) 带参数的宏定义
 
  1. #define <宏名> (<参数表>) <宏体>
  2. 例: #define A(x) x
先来看一道题:

#define SUB(x,y) x-y#define MODEIF_ARRAY(ele,offset,value) *SUB(&ele,offset)=valueint array[10]={1,2,3,4,5,6,7,8,9}MODEIF_ARRAY(array[6],4,0);for(int i=0;i<10;i++){    cout<<array[i];}

执行结果:程序可以正确编译,但是运行时会崩溃。

解析:因为宏在预处理的时候,会将MODEFIY_ARRAY(array[6],4,0)替换为*&array[6]-6=0;  即7-6=0;显示会报错。

解决办法:

#define SUB(x,y) (x-y)

总结:

1.定义宏的时候,小心的把参数用()括起来。

2.有时候考虑到整数溢出,要用长整型符号L,或者是无符号长整型。

3.宏定义后面没有;号


0 0
原创粉丝点击