c++宏定义问题
#ifndef ELEMTYPE_H#define ELEMTYPE_H
这是c++中的两句话,请问是什么意思,宏定义后面不是应该加参数啊
这是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的再次定义,避免了重定义
希望对你有所帮助!
这是用于条件编译的宏定义
一般在头文件上加入这种宏定义
为了防止重复包含头文件。
在头文件中加上这后能防止重复包含头文件。。