extern:

  extern修饰变量,声明该变量为外部文件的全局变量。若使用外部全局变量,必须用extern声明。

  extern修饰函数,声明该函数为外部函数。extern修饰的函数形参必须与原函数一致,否则可能导致传参出错,且编译器不会报警。建议声明外部函数省略掉extern。

const:

  定义常量,即用const声明的变量值不能被修改。

  const char* p, char const* p, char* const p的区别:

    C语言中const不能修饰*,因此const char* pchar const* p等价,均表示定义一个指向字符常量的指针,即*p为常量,*p不能被修改。

    而char* const p表示定义一个指向字符的常量指针,即p为常量,不能被修改,*p可以改变。

volatile:

  volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到volatile声明的变量,编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。

  例如:int i=1;if(i>0)...else... 编译器会认为在if判断前i赋值为1,i>0恒成立,因此编译器会优化掉else的语句以节省空间。

     volatile int i=1;if(i>0)...else... volatile告知编译器变量i可能被未知因素更改,i>0不一定成立,因此编译器会完整编译。

C语言之extern、const、volatile的更多相关文章

  1. C语言基础(8)-const,volatile,register关键字

    1 const const是定义一个常量 2 volatile 代表定义一个变量,这个变量值可能在CPU指令之外被改变 volatile int a;//定义了一个volatile类型的int变量 通 ...

  2. C语言学习笔记--const 和 volatile关键字

    1.const关键字 (1)const 修饰的变量是只读的,它不是真正的常量,本质还是变量,只是告诉编译器不能出现在赋值号左边! (2)const 修饰的局部变量在栈上分配空间 (3)const 修饰 ...

  3. c与c++中的extern const的区别和联系

    最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefine ...

  4. c语言之extern关键字

    1.定义 extern,外面的.外来的意思.那它有什么作用呢?举个例子:假设你在大街上看到一个黑皮肤绿眼睛红头发的美女(外星人?)或者帅哥.你的第一反应就是这人不是国产的. extern就相当于他们的 ...

  5. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  6. 解决全局变量共享---C语言的extern关键字用法

    在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中. 很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下: main.c test.c test.h ...

  7. const volatile int i

    问题: const volatile int i=10:这行代码有没有问题?如果没有,那 i 到底是什么属性? 回答: 没有问题,例如只读的状态寄存器.它是volatile,因为它可能被意想不到地改变 ...

  8. C语言深度剖析---const关键字(转载)

    const是constant的缩写,是恒定不变的意思.被const修饰的值,是只读变量. 1.const修饰只读变量,具有不变性      #include <stdio.h> int m ...

  9. const volatile同时限定一个类型int a = 10

    const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好 ...

  10. [C语言]类型限定词const解析

    作为C90增加的一个受限类型关键字,const赋予了它修饰的变量一个新属性——不变性,如果一个变量声明中带有关键字const,则无法通过赋值.增减运算来修改该变量的值. 一.指针与const结合 co ...

随机推荐

  1. 解决web项目无法部署到eclipse配置的本地tomcat

    一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...

  2. CentOS Linux 搭建 SVN(CollabNet Subversion)服务器

    安装CollabNet Subversion之前必须先安装JDK1.6和python2.4 ~ 2.6 groupadd svn useradd -g svn svnuser  passwd svnu ...

  3. springMVC-数据传递

    1.    使用Model.ModelAndView传递数据 注意事项: 1.    redirect的数据传递 Model与ModelAndView的传递效果是一样的,且传递是数据不能是引用类型. ...

  4. 学习中对input()的一些总结(raw_input()与input())

  5. React 实践记录 01 组件开发入门

    Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程序员创建,是一个非常强大的 ...

  6. log4j2 日志框架小记

    这两天开始学习日志框架了, 把常用的学习一下,记录一下.上篇日志写了log4j-----https://www.cnblogs.com/qiaoyutao/p/10995895.html今天就总结一下 ...

  7. 使用Spring Cloud Feign

    使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务 在spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就 ...

  8. Mysql order by 多字段排序

    mysql单个字段降序排序: select * from table order by id desc; mysql单个字段升序排序: select * from table order by id ...

  9. .net core API第一次试水

    这是我第一个API 项目他比普通的.NET CORE APPLICATION要多一个controllers层和appsetting.json 我们主要研究一下流程是怎么样的 在我尝试着改变launch ...

  10. Caused by: javax.el.PropertyNotFoundException: Property 'title' not found on type java.lang.String

    问题:在JSP页面显示从后台传过来的list集合数据报错. 错误信息: Caused by: javax.el.PropertyNotFoundException: Property 'title' ...