当前位置:编程学习 > C/C++ >>

c++宏定义问题

#ifndef ELEMTYPE_H
#define ELEMTYPE_H

这是c++中的两句话,请问是什么意思,宏定义后面不是应该加参数啊

答案:#ifndef ELEMTYPE_H
#define ELEMTYPE_H

的意思是,如果前面没有定义ELEMTYPE_H,那么现在定义ELEMTYPE_H

它不需要有值,只是表明是否被定义过,“指魔”说的很对,它是为了防止头文件的重复定义

我举个简单的例子帮助你理解:

你在a.h里定义了一个类a:

class a{

}

然后在b.h里定义了一个类b,而且引用了a.h:

#include "a.h"

class b{

}

编译器在编译时,b.h的实际内容为:

class a{

}

class b{

}

这里还没出现错误。

然后你在c.cpp里引用了a.h和b.h:

#include "a.h"

#include "b.h"

那么,编译器在编译的时候会把a.h和b.h里的内容原封不动的填进来以代替这两句,这样c.cpp就变为:

class a{

}

class a{

}

class b{

}

你可以很清楚的看到,类a重定义了。

那么,如果我们用到前面提到的宏定义来分别定义a.h和b.h如下:

//a.h

#ifndef A_H

class a{

}

#define A_H

//b.h

#ifndef B_H

class b{

}

#define B_H

那么,c.cpp展开后为:

#ifndef A_H

class a{

}

#define A_H

#ifndef A_H

class a{

}

#define A_H

可以看到,执行第一次class a的定义时,由于宏A_H未定义,故此时执行类a的定义,并定义A_H,然后执行第二次class a的定义时,发现A_H已经定义,因此跳过a的再次定义,避免了重定义

希望对你有所帮助!

这是用于条件编译的宏定义

一般在头文件上加入这种宏定义

为了防止重复包含头文件。

在头文件中加上这后能防止重复包含头文件。。

上一个:关于C++编程
下一个:如何学习C++

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,