(一)extern在头文件里的使用方法

由于头文件包括在多个源文件里。而且变量的定义仅仅能出现一次,所以在头文件里。 仅仅能够声明不能够出现定义。

我们能够在头文件里用extern声明全局变量,这样在包括此头文件的cpp 中可直接使用 声明过的这个全局变量(例如以下面程序中的变量a)。

可是有三个例外:

1.头文件里能够定义类

2.值在编译时就已经知道的const对象

3.能够定义inline函数

extern int ival; // yes
extern int ival=1; //error
int ival; //error
const int ival =3; //yes

(二)使用头文件保护符避免多重包括

#ifndef 检測指定的预处理器变量是否没有定义。#define接受一个名字并定义改名字为预处理器变量。

#endif代表处理的边界。

// mine.h
#include <iostream>
extern int a;
const int b = 2;
//int c; error 提示反复定义 //hello.cpp
#include"mine.h"
int f(int x)
{
return a++;
}
//amin.cpp
#ifndef TEST //检測指定的预处理器变量是否没有定义
#define TEST //定义预处理器变量
#include "mine.h"
#endif //end
using namespace std;
int a = 2; //extern 都是针对全局变量的(假设是局部的不能在还有一个cpp中使用)
int main()
{
cout << a << " " << b << endl;
return 0;
}

C++ Primer 学习笔记与思考_3 ---头文件那些事儿(extern)的更多相关文章

  1. [转]Linux学习笔记——例说makefile 头文件查找路径

    0.前言     从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助 ...

  2. Linux学习笔记——例说makefile 头文件查找路径

    0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力.所以特意借 ...

  3. C++ Primer 学习笔记与思考_7 void和void*指针的使用方法

    (一)void的含义 void的字面意思是"无类型",void差点儿仅仅有"凝视"和限制程序的作用,由于从来没有人会定义一个void变量,让我们试着来定义: v ...

  4. C++ Primer学习笔记(二)

    题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一)   27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...

  5. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  6. C++ Primer 学习笔记_5_变量和基本类型(续2)

     变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...

  7. 学习笔记:APP切图那点事儿–详细介绍android和ios平台

    学习笔记:APP切图那点事儿–详细介绍android和ios平台 转载自:http://www.woofeng.cn/articles/168.html   版权归原作者所有 作者:亚茹有李 原文地址 ...

  8. Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  9. C++ Primer学习笔记(一)

    始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示  之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...

随机推荐

  1. 在量化金融中15个最流行的Python数据分析库

    Python是当今应用最广泛的编程语言之一,以其效率和代码可读性著称.作为一个科学数据的编程语言,Python介于R和java之间,前者主要集中在数据分析和可视化,而后者主要应用于大型应用.这种灵活性 ...

  2. css中常用的七种三栏布局技巧总结

    三栏布局,顾名思义就是两边固定,中间自适应.三栏布局在开发十分常见,那么什么是三栏布局?例如当当网首页边商品导航和右边导航固定宽度,中间的主要内容随浏览器宽度自适应.效果如下图所示: 下面围绕的这样的 ...

  3. &nbsp; 等等空格用法

    平时经常用到 空格转移字符,记住一个   表示一个字符就可以了. Non-Breaking SPace 记住它是什么的缩写,更有助于我们记忆和使用.下面的字符转义自己视图翻译一下. 记录一下,空格的转 ...

  4. angular实现动态的留言板案例

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. tomcat注册windows服务

    1,首先查看当前window服务中是否已经存在同名服务.查看方法: 在服务列表里查看有没有Apache 或tomcat相关的服务, 如果有的话,请在上面点鼠标右键--->属性,记下此服务的名称, ...

  6. 06--C语言数学函数

    在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include <math.h> 或 #include "math.h",这里的<>跟&quo ...

  7. 03--SQLtie三言两语SQLtie链接(join)

    本文将从连接的理论和语法讲起,结合具体的例子,详细分析 SQL 连接. 之前对数据库的连接操作似懂非懂,大概知道是什么东西,但是面试笔试的时候被虐成渣,讲不清连接到底是什么.吃一堑,长一智.这就是所谓 ...

  8. bootstrap与jQuery结合的动态进度条

    此款进度条实现的功能: 1.利用了bootstrap的进度条组件. a.在最外层的<div>中加入class .progress,在里层<div>加入class .progre ...

  9. linux 性能分析与优化

    一.影响Linux服务器性能的因素 1.操作系统级 (CPU 内存 磁盘I/O性能 网络带宽) 2.程序应用级 二.系统性能评估标准   好  坏 极差 cpu user% +sys% <70% ...

  10. 执行 cobbler get-loaders报错

    在配置cobbler安装时执行 cobbler get-loaders报错 [root@110:~]# cobbler get-loaders Traceback (most recent call  ...