先引入一下题啊,主要是看到有人这样写


我个人觉的这样写没什么意思,没有体现出了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的作用的更多相关文章

  1. extern和include的作用

    首先要搞清楚的是.h头文件中都是一些声明性的语句,是不分配内存的,所以头文件中有对函数的声明,有define语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的 ...

  2. #ifdef __cplusplus extern c #endif 的作用

    #ifdef __cplusplus // C++编译环境中才会定义__cplusplus (plus就是"+"的意思) extern "C" { // 告诉编 ...

  3. 再议Java中的static关键字

    再议Java中的static关键字 java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:<Java中的static关键字解析>. 今天我们再来谈一谈st ...

  4. 再议 js 数字格式之正则表达式

    原文:再议 js 数字格式之正则表达式 前面我们提到到了js的数字格式<浅谈 js 数字格式类型>,之前的<js 正则练习之语法高亮>里也提到了优化数字匹配的正则.不过最近落叶 ...

  5. Python学习之再议row_input

    再议raw_input birth = raw_input('birth: ') if birth < 2000: print '00前' else: print '00后' 运行结果: bir ...

  6. 再议perl写多线程端口扫描器

    再议perl写多线程端口扫描器 http://blog.csdn.net/sx1989827/article/details/4642179 perl写端口多线程扫描器 http://blog.csd ...

  7. 再议C风格变量声明

    NeoRAGEx2002曾经有一篇文章提到这个问题,但是有很多内容并没有包括,例如const和__declspec. 最近我遇到一些这方面的问题,感觉有必要做一个系统性的总结.后来经过一些实验,得出了 ...

  8. const ;static;extern的使用与作用

     const                                                                /**      const :常量      const  ...

  9. (二)再议MII、RMII、GMII接口

    概述:         MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC ...

随机推荐

  1. linux下忘记mysql root密码解决办法

    vi /etc/my.cnf    #编辑文件,找到[mysqld],在下面添加一行skip-grant-tables [mysqld] skip-grant-tables :wq!  #保存退出 s ...

  2. mysql explain

    我们使用EXPLAIN解析SQL执行计划时,如果有下面几种情况,就需要特别关注下了: 首先看下 type 这列的结果,如果有类型是 ALL 时,表示预计会进行全表扫描(full table scan) ...

  3. 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:解压到 ...

  4. hadoop文件系统FileSystem详解 转自http://hi.baidu.com/270460591/item/0efacd8accb7a1d7ef083d05

    Hadoop文件系统 基本的文件系统命令操作, 通过hadoop fs -help可以获取所有的命令的详细帮助文件. Java抽象类org.apache.hadoop.fs.FileSystem定义了 ...

  5. SVN使用(一)

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  6. viewpager viewpager+fragment

    内页面  不单写页面   viewpager+布局 import java.util.ArrayList; import java.util.List; import android.os.Bundl ...

  7. startActivityForResult 页面跳转回调

    import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util. ...

  8. 关于mac book 的启动选项

    苹果电脑是用EFI的,没有BIOS,唯一可以设置的是开机的启动选项.可以在基于 Intel 的 Mac 电脑上使用下列启动键组合启动时按住 C 键——从可启动 CD 或 DVD 光盘启动,如随机附带的 ...

  9. 给文件加ip访问限制

    获取IP: function getIP(){ return isset($_SERVER['HTTP_X_FORWARDED_FOR'])? $_SERVER['HTTP_X_FORWARDED_F ...

  10. linux下echo命令详解(转)

      linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 echo命令的功能是在显示器上显示一段文字,一般起到一个 ...