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这种)
c++踩坑大法好 宏定义 头文件的更多相关文章
- c++踩坑大法好 typedef和模板
1,typedef字面意思,自定义一种数据类型 语法:typedef 类型名称 类型标识符; 基本用法: 1) 为基本数据类型定义新的类型名. 2) 为自定义数据类型(结构体.公用体和枚举类型)定义简 ...
- c++ 踩坑大法好 复合数据类型------vector
1,vector是啥? 是具有动态大小的数组,具有顺序.能够存放各种类型的对象.相比于固定长度的数组,运行效率稍微低一些,不过很方便. 2,咋用? 声明: vector <int> vi; ...
- (四)静态断言(上),assert,NDEBUG, 以及通过宏定义处理文件包含关系
一.断言:运行时与预处理时 断言(assertion)是一种编程常用的手段.想必大家都见过 assert 吧.今天我们就来了解一下它. 通常情况下,断言就是将一个返回值总是需要为真的判别式放在语句中, ...
- Python 踩坑之旅文件系统篇其一文件夹也是个文件
目录 1.1 案例 1.2 分析 1.3 扩展 1.4 技术关键字 下期预告 代码示例支持 平台: Mac OS Python: 2.7.10 代码示例: - wx: 菜单 - Python踩坑指南代 ...
- c++ 踩坑大法好 char字符,char数组,char*
1,基本语法 1,定义一个char字符: char hehe='a'; //单引号 2,定义一个由char字符组成的数组: char daqing[] = "abcd"; char ...
- c++ 踩坑大法好 枚举
1,枚举是个啥? c++允许程序员创建自己的数据类型,枚举数据类型是程序员自定义的一种数据类型,其值是一组命名整数常量. ,wed,thu,fri,sat,sun}; //定义一个叫day的数据类型, ...
- c++踩坑大法好 数组
1,c++遍历数组 int数组和char数组不同哦,int占4位,char占1未,同理double也不同.基本遍历方法: ] = { ,,, }; ]); printf("len of my ...
- c++踩坑大法好 赋值和指针的区别
1,先说结论: 两个指针指向同一个结构,一个改了结构,另一个也会改掉. 两个指针指向同一个结构,修改了其中一个的指向,并且改了其中的内容,另一个不为所动. 2,看例子 main.cpp #includ ...
- .Net Core 踩坑记录--无法逐步调试类库文件
前提 新建类库 在新项目中引用该类库 将类库对应的.PDB文件 拷贝至新项目的bin文件夹下 结果 无法进行跟踪调试 狗带 分析与解决 1: 打开 工具-->选项-->调试 2: 常规-- ...
随机推荐
- 极其实用的JS单行代码
个人博客 地址:https://www.wenhaofan.com/a/20190629211647 1.强制布尔值 要将变量强制转换为布尔值而不更改其值: const myBoolean = !! ...
- PHP0008:PHP基础-数组
- 使用Scanner类
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { ...
- 【Pyecharts可视化分享】杭州步行热门路线等~
前言 本文包括内容如下: 杭州步行热门路线 渐变效果散点图 均是Echarts官方提供等示例,本文将会通过Pyecharts来进行实现. 杭州步行热门路线 因为代码中需要调用百度地图,所以开始之前你需 ...
- Android数据存储之共享参数SharedPreferences
SharedPreferences是Android的一个轻量级存储工具,采用的存储结构是Key-Value的键值对方式,类似于Java的Properties类,二者都是把Key-Value的键值对保存 ...
- windows 2012 r2怎么进入本地组策略
可以使用命令行或使用 Microsoft 管理控制台 (MMC) 打开本地组策略编辑器.通过命令行打开本地组策略编辑器的步骤单击“开始”,在“开始搜索”框中键入 gpedit.msc,然后按 Ente ...
- super().__init__()方法
class first(object): def __init__(self,age,name): self.age = age self.name = name class second(first ...
- Linux之docker搭建
1.docker运行环境 CentOS7(64-bit),要求系统为64位,系统内核版本为3.10以上 查看系统版本:cat /etc/centos-release 查看系统内核版本:uname -a ...
- jsp环境搭建
jsp开发环境需要JDK与Tomcat,需先下载JDK组件与tomcat组件 JDK地址:https://www.oracle.com/technetwork/java/javase/download ...
- Spring 理解和开始
1.先看看Spring的历史吧 https://baijiahao.baidu.com/s?id=1620099105315862154&wfr=spider&for=pc 2.Spr ...