#define 与 const 区别

James_ht 2006-02-07 05:25:13
程序1
#include "stdafx.h"
#define M 10
int main(int argc, char* argv[])
{
char cTest[M];

printf("Hello World!\n");
return 0;
}


程序2
#include "stdafx.h"
const int B = 10;
int main(int argc, char* argv[])
{
char cTest[B];

printf("Hello World!\n");
return 0;
}


上面的程序那个好一些。

...全文
335 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericqxg007 2006-02-07
  • 打赏
  • 举报
回复
恩 同意楼上说的
编程时应尽量使用const来代替#define
runall 2006-02-07
  • 打赏
  • 举报
回复
#define 没有类型检查,而const有类型检查
kunp 2006-02-07
  • 打赏
  • 举报
回复
就你上面的程序而言
没什么分别

#define M 10
是宏定义,表示以后程序中出现 的 M 都将被替换为10,文本级的替换

这里的M没有类型,不是变量,不占空间

const int B = 10;
是定义常量,表示定义了一个全局变量B,类型为int,值为10。

#define这种宏定义,能不用就不用,这是大师说的
根据原作 https://pan.quark.cn/s/a09d80cf6b42 的源码改编 #defineconst以及typedef是C编程语言中的三个核心概念,它们彼此之间既有紧密的关联也存在显著的差异。 接下来将深入阐释它们之间的关联和差异。 一、#defineconst的关联及差异#defineconst均可用于常量的定义,但二者存在本质上的不同。 const常量具备数据类型,而宏常量则不具备数据类型。 编译器能够对const常量实施类型安全验证,而对于宏常量仅执行字符替换,缺乏类型安全验证,并且在字符替换过程中可能引发非预期的错误(边缘效应)。 再者,const常量在堆栈中分配了空间,而宏常量仅将具体数值直接传递至目标变量。 const常量是一个运行时的概念,它在程序中确实存在并可被调用、传递。 相对而言,#define常量是一个编译时的概念,其生命周期截止于编译阶段:在实际程序中它仅表现为常数、命令中的参数,并无实际存在。 const常量位于程序的数据段,#define常量则存在于程序的代码段。 部分集成化的调试工具能够对const常量进行调试,然而却无法对宏常量进行调试。 二、typedef与#define的差异typedef主要是为了提升可读性而赋予标识符的新名称(仅是别名),而#define最初在C语言中是为了定义常量,随着C++中const、enum、inline的出现,它也逐渐转变为起别名的工具。 typedef与#define区别在于,typedef能够定义一个新的类型别名,而#define仅是简单的字符串替换(原地扩展)。 typedef的新名称具有封装性,使得新命名的标识符具备更便捷的变量定义功能。 例如,typedef(int*)pINT;与#define...

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧