码迷,mamicode.com
首页 > 其他好文 > 详细

【关键字】一些关键字用法总结

时间:2015-07-14 22:48:22      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

Register

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



Const

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

   1>参数

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

      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成员函数的声明中,const关键字只能放在函数声明的尾部,表示该类成员不修改对象




Static

   1>修饰变量

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

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

    2>修饰函数

       函数前加static 使得函数成为静态函数。
    但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。
    使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。




Volatile

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





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++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。

   关键字使用的总结。

   1>无参宏定义

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

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

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

 
   2>带参宏定义

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

     在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。
    对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。


   3>防止重复定义

   例如
          #ifndef __headerfileXXX__
         #define __headerfileXXX__
          …
          文件内容
          …
          #endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

【关键字】一些关键字用法总结

标签:

原文地址:http://blog.csdn.net/zhaoyaqian552/article/details/46882555

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!