关于宏

向良玉 2009-03-26 07:49:48
#define n 10
int num[n];

int n=10;
int num[n];
有什么区别???
...全文
110 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiong593664937 2009-03-27
  • 打赏
  • 举报
回复
第一个n是常量
第二个n是变量
AJrxin 2009-03-26
  • 打赏
  • 举报
回复
int n=10;
int num[n];
这样定义不可以的。
duoduo168 2009-03-26
  • 打赏
  • 举报
回复
宏为简单的文字替换,没有经过编译器类型检查的。变量可以由编译器检查类型。
aozhi 2009-03-26
  • 打赏
  • 举报
回复
在C89下
int n=10;
int num[n];
编译过不了。因为编译器根本不知道n是什么,无法为数组开辟空间。

#define n 10
int num[n];
再编译前,预处理器会把n替换成10,因此,可以编译通过。

预处理⇒编译⇒链接⇒执行
monster2002 2009-03-26
  • 打赏
  • 举报
回复
宏是在预编译的时候就由编译器进行替换,没有申请内存,n只是一个将被替换掉的标识。
而你声明变量编译器会在编译的时候为变量申请一块内存。

第一种写法是为了让自己的代码看着舒服(至少不会遭到鄙视),因为代码里直接出现数字比如 int array[10]就会降低代码的可读性,还会增加代码的维护难度,但你要是先#define ARRAY_SIZE 10 然后 int array[ARRAY_SIZE]看起来就好多了,另外声明宏一般都是大写,。
第二种写法完全没有意义,还不如 int array(10)。
hndth 2009-03-26
  • 打赏
  • 举报
回复
帮顶
ZM27080401 2009-03-26
  • 打赏
  • 举报
回复
如果程序中大量用到同一常量,并且这个常量偶尔会被修改,使用宏定义,那个就是变量了,这个就没什么好说的了
xidianxiancai 2009-03-26
  • 打赏
  • 举报
回复
int n=10;
int num[n];
不能放在一起用的吧。不能用一个变量值作为数组的维数的
Rain208 2009-03-26
  • 打赏
  • 举报
回复
一个是在编译期就已经确定下来的值-----常量 as const int n = 10;
一个在运行时才能确定的变量
xiaoyuer5222 2009-03-26
  • 打赏
  • 举报
回复
第二种定义,n为变量,不能初始化数组长度
#define n 10
int num[n];

int num[10]
没有什么区别,只是为了程序的可维护性
当需要更改数组大小时只需要改变宏定义中的大小,其余不用改变
malpower 2009-03-26
  • 打赏
  • 举报
回复
你这样想嘛,上面那个是常量,下面哪个是变量,这样想要好理解点.
ForestDB 2009-03-26
  • 打赏
  • 举报
回复
你确定C89下能有下面的那种写法?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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