zoukankan      html  css  js  c++  java
  • const与预处理宏#define的区别

    在c语言程序设计时,预处理器可以不受限制地建立宏并用它来替代值。因为预处理器只做一些文本替换,宏没有类型检测概念,也没有类型检测功能。所以预处理器的值替换会出现一些小的问题,出现的这些问题,在c++中是通过const值来避免。

    #define BUFSIZE 100

    BUFSIZE是一个名字,并且它只存在预处期间,在编译和运行期间,是没有BUFSIZE,所有的BUFSIZE被100替换。因此BUFSIZE不占用存储空间,且能放在一个头文件里面,目的是为了使用BUFSIZE的所有编译单元提供一个值。

    const int bufsize=100;

    上述语句的bufsize, 首先是有类型的,而且上述语句的处理是在编译期间处理的,也就是const int bufsize=100; 这条语句是有编译器处理的,编译器会这条语句进行类型检测,并且如果是一个常量表达式,编译器还会执行常量折叠(在编译期间简单化常量表达式的一个过程,简单来说就是将常量表达式计算求值,并用求得的值来替换表达式带入常量)

    const 和#define 一般都会放在头文件中,通过包含头文件,可把const定义单独放在一个地方并把它分配给一个编译单元。

    c++中的const是默认内部链接的,通常c++编译器并不为const创建存储空间,相反它把这个定义保存在符号表里。但是extern以及取const得地址,会对const进行存储空间分配。

  • 相关阅读:
    elasticsearch-排序(六)
    elasticsearch-分词器(五)
    elasticsearch-搜索-基本搜索(四)
    elasticsearch-文档(三)
    elasticsearch-集群(二)
    FFmpeg架构之I/O模块分析
    DirectShow 在 VS2010 中开发环境的设置
    预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
    2012年软件开发者薪资调查报告
    深入了解 VP8
  • 原文地址:https://www.cnblogs.com/cplinux/p/5573896.html
Copyright © 2011-2022 走看看