其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
const 与 #define 的比较

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:

    相信只要看过有关C++优化的动物都知道,那些优化条款中总会提到: 用 const 来代替 #define,我一直以来也是这么做,并且很少怀疑过,但今天却发现了一个 const 的不足之处:
    const int i=0;
    void main()
    {
      printf("address of const i:%08X\n",&i);
    }
    对于以上的代码,我希望编译的时候提示出错,但很可惜,没有任何错误发生
    再来看看,
    const int i=0;
    void main()
    {
      int *p=(int*)&i;
      *p=33;
    }
    编译,通过!!但程序一运行就立即发生不人见人爱的非法操作..-_-

    从上面的2则代码中,我们可以看出
    (1) const 也需要占用内存,并且需要占用文件空间,这对程序来讲,无疑是种残酷的折磨
        不过,当遇到访问这个变量时语句时,编译器会用常数而不是内存寻址的方式

    (2) 在一定的程度来讲, const 会导致严重的后果,一但代码比较多,这种错误往往难以被发现

   
    所以,我还是建议要用常量的朋友用#define(看看自带的.h,哪个不是用#define的?),如果你对#define还是觉得不怎样,那还可以试试用enum

    (测试环境: VS6.0,Win98Se)




相关文章

相关软件