再议extern和include的作用
先引入一下题啊,主要是看到有人这样写

我个人觉的这样写没什么意思,没有体现出了extern的特性。
为什么我要这样说,先谈谈include,总是有人觉得这个东西很神秘,很特殊不知道他干了什么。其实它没有我们想象的那么神秘,它就是把包含的文件完全的放到当前文件展开。在什么时候展开那在预编译简单就会完全的展开。对于上面的图片里的例子就是把1.c里面的俩句代码放到了2.c。
extern这个词是干什么的那?它是你在写C语言的时候写了几个文件,比如上面,1.c和2.c 但是注意在2.c里面人家可不用包含了,这个时候就要用extern这个词来声明。告诉编译器下面用到的变量虽然我在。但注意extern只能修饰全局变量
当前文件中并没有定义,但是我在其他文件是定义了的,编译器你就不要报错了。它的作用就是这个,回到我们上面说的 “我个人觉的这样写没什么意思,没有体现出了extern的特性。“大家想想就了可以理解extern是修饰俩个文件的,而你用include已经成了一个一个文件,就没必要修饰了。

还没完,那include就没用了吗?在有较多的extern引入的时候我们可以写一个头文件,头文件里面写上这一堆extern。然后在包进去,然后在预编译的时候展开,就和我们写在里面一样。

函数中的extern
对于函数的extern其实和上面的大同小异,我们平常说函数中的声明,大家应该都知道,那就是函数在下面定义的时候需要在上面声明。这时是不用extern的。
但是如果是在外部定义了函数,你还不加,那么就会在编译的时候报警告
下面是我写的俩种截图 下面的那种我对声明又进一步封装到头文件。

第二种写法

再议extern和include的作用的更多相关文章
- extern和include的作用
首先要搞清楚的是.h头文件中都是一些声明性的语句,是不分配内存的,所以头文件中有对函数的声明,有define语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的 ...
- #ifdef __cplusplus extern c #endif 的作用
#ifdef __cplusplus // C++编译环境中才会定义__cplusplus (plus就是"+"的意思) extern "C" { // 告诉编 ...
- 再议Java中的static关键字
再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...
- 再议 js 数字格式之正则表达式
原文:再议 js 数字格式之正则表达式 前面我们提到到了js的数字格式<浅谈 js 数字格式类型>,之前的<js 正则练习之语法高亮>里也提到了优化数字匹配的正则.不过最近落叶 ...
- Python学习之再议row_input
再议raw_input birth = raw_input('birth: ') if birth < 2000: print '00前' else: print '00后' 运行结果: bir ...
- 再议perl写多线程端口扫描器
再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...
- 再议C风格变量声明
NeoRAGEx2002曾经有一篇文章提到这个问题,但是有很多内容并没有包括,例如const和__declspec. 最近我遇到一些这方面的问题,感觉有必要做一个系统性的总结.后来经过一些实验,得出了 ...
- const ;static;extern的使用与作用
const /** const :常量 const ...
- (二)再议MII、RMII、GMII接口
概述: MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...
随机推荐
- 通过struts.xml搭建、为属性注入值_2015.01.04
01:web.xml配置: <?xml version="1.0" encoding="UTF-8"?> <web-app version=& ...
- mac工具-解析json visualJSON和JSON Accelerator这两款工具
- VS2013中的快捷键
在VS2012中Ctrl+E+D 是对齐代码,然而在VS2013中变成了Ctrl+K+F #region的快捷键 Ctrl+K+S /// <summary> 快捷键 先写好函数或方法,然 ...
- rails控制台进入
数据库控制台: rails db .help查看可使用的命令 rails控制台 rails c 普通ruby控制台: irb
- Linux centOS7 下安装mysql5.7.10
1:下载二进制安装包 http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz 2:解压到 ...
- oracle的函数
1:nvl函数 nvl函数将一个null值转换为一个实际的值,数据类型可以是日期,数字,字符,数据类型必须匹配,vl能够转换任何数据类型,但是转换的数据类型返回值必须是nvl(expr1,expr2) ...
- Oracle中游标返回多条数据的情况
DECLARE -- 定义类型. TYPE test_type IS TABLE OF test_main%ROWTYPE; test_data test_type; -- 定义游标. CURSOR ...
- 夺命雷公狗---DEDECMS----9dedecms单标签
我们这一节课开始将dedecms的标签了,dedecms里面的标签分好多个的,我们先来看下他的标签长得啥样的先: 随便点击一个修改即可见到标签了: 这里面上面的大文本框里面有标签的用法下面有参数的说明 ...
- java - Annotation元数据
Annotation元数据(一) 一.Annotation究竟是什么? 是java5.0中的新特征 数据的数据(元数据) Annotation和访问修饰符一样,应用于包.类型.构造方法.方法.成员变量 ...
- DataSnap 的连接事件顺序图
无意看到这两幅图,虽然已经了解,还是转一份保留以备后用