当前位置: 首页 >> 程序设计 >> 嵌入式C 中的volatile和const
 

嵌入式C 中的volatile和const

作者:      来源:zz     发表时间:2008-06-12     浏览次数:      字号:    

    C语言关键字volatile表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。
    该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程。对于C编译器来说,它并不知道这个值会被修改,自然就把它cache在寄存器里面。
    C编译器是没有线程概念的,这时候就需要用到volatile。
    volatile的本意是指这个值可能会在当前线程外部被改变,也就是说,我们要在threadFunc中的intSignal前面加上volatile关键字,这时候,编译器知道该变量的值会在外部改变,因此每次访问改变量时会重新读取。
 
 
    const可定义一个常量。如:int const a;
    那么,既然a的值不能被修改,如何让a拥有一个值呢?两种方法:
    第一,在定义时对它初始化,如:int const a=10;
    第二,在函数声明为const的形参在函数被调用时会得到实参的值。
 
    需要强调的是牵涉到指针变量的情况。如下所示:
    int const *a;
    int *const a;
    当const写在关键字之后时,查看const究竟指定了何种数据类型为常量要看const之前的数据类型。在第一条语句中,const指定常量的对象是整形数据,即指针a所指向的内存单元的整型内容,因此,该整型数据是不可被改变的,而a这个指针本身的值(地址)是可以被改变的。
    在第二个语句中,const指定常量的对象是指向整形数据的指针,则该指针本身(地址)的值是不可被改变的,而该指针所指向的内存单元的内容则是可以改变的。

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •