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. MySQL主从复制入门

    1.MySQL主从复制入门 首先,我们看一个图: MySQL 主从复制与读写分离概念及架构分析 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志 ...

  2. [译]tar打包时忽略某些文件夹内容

    使用tar的 --exclude的选项 $ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.t ...

  3. [转]Docker容器内不能联网的6种解决方案

    注: 下面的方法是在容器内能ping通公网IP的解决方案,如果连公网IP都ping不通,那主机可能也上不了网(尝试ping 8.8.8.8) 1.使用--net:host选项 sudo docker ...

  4. s debug

    value stack contents   ognl 值栈 stack context           action上下文 action上下文是一个map对象,通过#key获得对象内容,在#re ...

  5. 纸上得来终觉浅,绝知此事要躬行——Spring boot任务调度

    前言:之前今日开讲项目的时候,用到了Quartz进行任务调度.后来做一个电商项目的时候,还用到了Quartz任务调度. 觉得挺简单的,a peace of cake.  忽略了总结,当时闭着眼睛都能捉 ...

  6. Unity 移动方式总结

    1. 简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  7. BZOJ 1855: [Scoi2010]股票交易(DP+单调队列)

    1855: [Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未 ...

  8. [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)

    题目链接 Solution 完全背包 \(dp\) , 同时再加一个数组 \(v[i][j]\) 记录当总和为\(j\) 时第 \(i\) 种物品是否被选. 为保证从小到大和字典序,先将瓶子按大小排序 ...

  9. codechef AUG17 T3 Greedy Candidates

    Greedy Candidates Problem Code: GCAC The placements/recruitment season is going on in various colleg ...

  10. [CODEVS1051]接龙游戏

    题目描述 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. 输入描述 Input D ...