Register

    用register声明的变量称着寄存器变量,在可能的情况下会直接存放在机器的寄存器 中。但对32位编译器不起作用。当global optimizations(全局优化)开的时候,它会做出
选择是否放在自己的寄存器中;只是其他与registerkeyword有关的其他符号都对32位编译 器有效。

Const

     被const修饰的东西都受到强制保护,能够预防意外的变动,能提高程序的健壮性。 它能够修饰函数的參数、返回值,甚至函数的定义体。(特别注意。在C语言中,const修
饰的变量本质依然是变量;而在C++中,则变为常量。

)

   1>參数

    a.对于非内部数据类型的输入參数,应该将“值传递”的方式改为“const引用传 递”。目的是提高效率。比如将void Func(A a) 改为void Func(const A &a)。

    b.b.对于内部数据类型的输入參数,不要将“值传递”的方式改为“const引用传递”。

否则既达不到提高效率的目的,又减少了函数的可理解性。比如void Func(int x) 不应该改
为void Func(const int &x)。应该写成void Func(const int x)。

   2>返回值

    a.假设给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指 针)的内容不能被改动,该返回值仅仅能被赋给加const修饰的同类型指针。比如:const 
char * GetString(void);char *str = GetString();//错误const char *str = GetString();//正确

   b.假设函数返回值採用“值传递方式”,因为函数会把返回值拷贝到外部暂时的存储单元 中,加const修饰没有不论什么价值。

   3>函数

    const成员函数的声明中,constkeyword仅仅能放在函数声明的尾部,表示该类成员不修 改对象

Static

   1>修饰变量

    a.静态全局变量,作用域仅限于变量被定义的文件里。其它文件即使用extern 声 明也没法使用他。准确地说作用域是从定义之处開始。到文件结尾处结束,在定义 之处前面的那些代码行也不能使用它。

想要使用就得在前面再加extern。

    b.静态局部变量,在函数体里面定义的,就仅仅能在这个函数里用了,同一个文档中 的其它函数也用不了。因为被static 修饰的变量总是存在内存的静态区,所以即使这个函
数执行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

    2>修饰函数

    函数前加static 使得函数成为静态函数。但此处“static”的含义不是指存储方式, 而是 指对函数的作用域仅局限于本文件(所以又称内部函数)。

使用内部函数的优点是:不
同的人编写不同的函数时,不用操心自定义的函数,是否会与其他文件里的函数同名。

Volatile

    简单的说volatile的作用避免编译器优化。volatile提醒编译器它后面所定义的变量 随时都有可能改变,因此编译后的程序每次须要存储或读取这个变量的时候,都会直接从
变量地址中读取数据。假设没有volatilekeyword,则编译器可能优化读取和存储,可能暂 时使用寄存器中的值,假设这个变量由别的程序更新了的话,将出现不一致的现象。

typedef

   typedef 的真正意思是给一个已经存在的数据类型(注意:是类型不是变量)取一个 别名, 而非定义一个新的数据类型

   1>常规变量类型定义

   Typedef unsigned char uchar  //uchar a;(unsigned char a;)

   2>数组类型定义

   Typedef int arr[2]           //arr a;(int a[2];)

   Typedef int arr[M][N]        //arr a;(int arr[M][N];)

   3>指针类型定义

   Typedef int *pointer         //pointer p;(int *p;)

   Typedef int *pointer[M]      //pointer p;(int *p[M];)

   4>函数声明

   Typedef int fun(void)        //fun f;(int f(void);)

   //fun *p;(int (*p)(void);)

   5>函数指针

   Typedef int (*func)(void)    //func p;(int (*p)(void);)

Define

    在C或C++语言源程序中同意用一个标识符来表示一个字符串,称为“宏”。

   keyword使用的总结。

   1>无參宏定义

   其定义的一般形式为:#define 标识符 字符串

    a.宏定义是用宏名来表示一个字符串。在宏展开时又以该字符串代替宏名,这仅仅是一 种简单的代换,字符串中能够含不论什么字符,能够是常数,也能够是表达式,预处理程序对 它不作不论什么检查。如有错误。仅仅能在编译已被宏展开后的源程序时发现。

   b.b. 宏定义不是说明或语句。在行末不必加分号。如加上分号则连分号也一起置换。

   2>带參宏定义

     带參宏定义的一般形式为: #define 宏名(形參表) 字符串

  在宏定义中的參数称为形式參数,在宏调用中的參数称为实际參数。

对带參数的宏,在调 用中。不仅要宏展开,并且要用实參去代换形參。

   3>防止反复定义

   比如

   #ifndef __headerfileXXX__

  #define __headerfileXXX__

   …

   文件内容

   …

   #endif

【C语言 C++】简单keywordRegister,Const,Static,Volatile,typedef,Define的理解的更多相关文章

  1. void指针意义、Const、volatile、#define、typedef、接续符

    1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本 ...

  2. const,static,volatile

    1.static 作用 在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.2). 在模块内(但在函数体外),一个被声明为静态的 ...

  3. C语言之extern、const、volatile

    extern: extern修饰变量,声明该变量为外部文件的全局变量.若使用外部全局变量,必须用extern声明. extern修饰函数,声明该函数为外部函数.extern修饰的函数形参必须与原函数一 ...

  4. C语言中关键字auto、static、register、const、volatile、extern的作用

    原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.exter ...

  5. C语言const和volatile关键字

    这部分内容比较简单,我这里直接先做总结,然后通过写三个测试代码,体会其中的关键点 一.总结      1.const使得变量具有只读属性(但是不一定就是不能更改) 2.const不能定义真正意义上的常 ...

  6. C语言进阶——const 和 volatile 分析09

    const只读变量: const修饰的变量是只读的,本质还是一个变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局函数区分配资源空间 const只在编译器有用,在运行期无用 ...

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

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

  8. C语言-const和volatile深度分析

    1.const只读变量 const修饰的变量是只读的.本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间 const只在编译期有用,在运行期无用 con ...

  9. 第9课 const和volatile分析

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

  10. const和volatile

    const是只读变量 const修饰的变量是只读的,其本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间 const只在编译期有用,在运行期无用 con ...

随机推荐

  1. Adaboost和GBDT的区别以及xgboost和GBDT的区别

    Adaboost和GBDT的区别以及xgboost和GBDT的区别 以下内容转自 https://blog.csdn.net/chengfulukou/article/details/76906710 ...

  2. 聊聊、RabbitMQ 配置文件

    windows 下面安装 rabbitMQ 比较简单,但是想去改端口相关信息却找不到配置文件在哪.Linux 在 /etc/rabbitmq/rabbitmq.config 下面就可以找到.来看看 w ...

  3. [python][django学习篇][12]继续设计博客首页,点击博客标题能显示文章的详情

    回顾一下开发流程:配置url, 编写视图函数,编写对应模板 配置URL 首页视图匹配的 URL 去掉域名后,是一个空的字符串.每篇文章的详情有着不同的 URL,因此可以设计文章详情页面URl:< ...

  4. ALPHA 冲刺(一)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...

  5. 201621123034 《Java程序设计》第1周学习总结

    1. 本周学习总结 知道了java的用途有安卓手机应用,企业服务器后端,java web.学到了新概念:类.HelloWorld.java 中 HelloWorld 是主文件名,区分 .java和 . ...

  6. POJ 3104:Drying(二分)

    题目大意:你有一台机器可以烘干衣物,现在有n个衣物需要烘干,每件衣服都有一个值表示含水量,烘干机一秒可以烘干k滴水,一件衣服不在烘干机上时会每秒自动蒸发一滴水,求最少用多少时间烘干所有衣服. 分析: ...

  7. gcc编译生成静态及动态链接库步骤

    gcc编译生成静态及动态链接库步骤 这两天在看<Linux C程序设计大全>,吴岳编著,清华大学出版社.这本书是在一个培训机构看到的,在网上查了下该书的相关信息.从目录而言,该书涵盖了Li ...

  8. pq

    pq 题目描述 小q 的女朋友送给小q nn个整数.但是这些数太大了,小q 的女朋友拿不动,于是拜托小q把这些数减少一些. 小q 每次可以选择其中的两个x,yx,y (不能同时选择同一个数) 变成x− ...

  9. .NET and php

    原文发布时间为:2011-12-29 -- 来源于本人的百度文章 [由搬家工具导入] http://www.php-compiler.net/blog/2011/phalanger-3-0

  10. RazorExtensions Templated Razor Delegates

    原文发布时间为:2011-04-27 -- 来源于本人的百度文章 [由搬家工具导入] Templated Razor Delegates David Fowler turned me on to a ...