c++踩坑大法好 宏定义 头文件

1,c++宏定义是干啥的?防止重复引用,如何防止重复引用?

//a.h
//声明一个类,和其他声明
#include <iostream>
class A{
    public:
        static int a;
        static int b;
};

//b.h
//需要a.h的类,又还有些其他声明
#include "a.h"

//main,cpp
//既需要a.h,又需要b.h,所以只能把两个头文件都引用过来。

#include "a.h"
#include "b.h"

//报错,此处重复定义了,因为一共引用了3个文件:
//1,a.h
//2,b.h
//3,a.h(b.h中引用的)
int main{
    xxx一堆代码
}

怎样修改才对?

//a.h
#ifndef hehe
#define hehe
#include <iostream>
class A{
    public:
        static int a;
        static int b;
};
#endif
//这样当第一次引入a.h的时候会声明class并且定义一个hehe变量,第二次走到
a.h的时候发现已经有了hehe了,就不会再重新声明hehe了

2,头文件里能写什么样的声明?

①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。

②变量声明:用于向程序表明变量的类型和名字。

③定义也是声明:当定义变量时我们声明了它的类型和名字。

④extern关键字:通过使用extern关键字声明变量名而不定义它。

所以,h文件中原则上只能写类声明,函数声明,静态全局变量(const这种),外部变量(extern这种)

posted @ 2020-01-16 16:15  0点0度  阅读(427)  评论(0编辑  收藏  举报