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


我个人觉的这样写没什么意思,没有体现出了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第5天 socket api

    IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中 通用地址结构用来指定与套接字关联的地址.以socka ...

  2. flot_js_$用法解释

    $用法解释 $在JS中本身只是一个符号而异,在JS里什么也不是.但在JS应用库JQUERY的作者将之做为一个自定义函数名了,这个函数是获取指定网页元素的函数,使用非常之频繁,所以好多新手不知道,还以为 ...

  3. 在desk于webi中资料查询不一致

    1,首先检查是否勾选重复列,重复列造成 2,缓存

  4. JSP-08-第三方控件的使用

    添加图片 下载 commons-fileupload-1.2.2.jar和commons-io-2.4.jar 导入项目 在添加涂抹的页面设置表单属性  enctype=”multipart/form ...

  5. 针对Android 模拟器启动慢的问题

    Android 模拟器一直以运行速度慢著称,可以使用intel HAXM技术为Andorid模拟器加速.使模拟器运行度媲美真机, 彻底解决模拟器运行慢的问题. 1. Intel HAXM 是什么 In ...

  6. 有关git的换行符的处理问题

    签入签出时对换行符的操作: #签出时将LF转换为CRLF,签入时将CRLF转换为LF git config --global core.autocrlf true #签出时不转换,签入时转换为LF g ...

  7. Ado.net连接池 sp_reset_connection 概念

    什么是连接池? 正常情况下,每次访问数据库都会打开和关闭,中断物理连接后需要再次进行物理连接.这样操作会浪费资源 使用连接池,主要的区别在于,不需要中断物理连接,即每次中断请求时spid还是存在! 原 ...

  8. UBoot讲解和实践-----------讲解(一)

    Boot Loader之ARM Uboot移植 阶段一 理论篇 1.boot loader需要完成的任务:               1>设计程序的入口地址               2&g ...

  9. Ceph的客户端安装

    Contents [hide] 1 参考 1.1 ceph端口访问控制 1.2 用Kernel方式挂载 1.2.1 安装ELRepo及kernel-lt 1.2.2 修改Grub引导顺序并重启动 1. ...

  10. JS货币数字转换中文

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...