| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 654 人关注过本帖
标题:请教define
只看楼主 加入收藏
wangnd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-7-22
收藏
 问题点数:0 回复次数:5 
请教define
#define s "ssss"
请问现在的s 是什么类型的,都可以赋什么样的值。
搜索更多相关主题的帖子: define 
2008-07-28 10:05
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
S是一个宏,是一个常量表达式。
S代表后面的字符串,它不可以赋值。

对于你这个 #define s "ssss"

在你的程序中只要出现以s为标识符的时候在编译时就用"ssss"代替
2008-07-28 10:16
wangnd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-7-22
收藏
得分:0 
表于 2008-7-28 10:16 只看该作者
那我可以用一个char a[10]
然后用strcpy(a, s);
请部a 数据是如何存储的,是a[0]=s,a[1]=s,a[2]=s吗?
2008-07-28 10:23
xiaomengxia2008
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-7-23
收藏
得分:0 
3. #define可以进行宏定义常量
3.1[解释]
可以对一些常见的变量,字符串等,进行宏定义,系统在编译期间,就会自动替换
如果不进行宏定义,一般如果此类变量,字符串等,需要修改,就需要对源文件中它们出现的地方一一修改,效率比较低,
而此种宏定义后,只需要修改一次,实现批量修改,效率较高.
而且有些数字或字符很麻烦,每次都要输入,就显得很繁琐,而且容易出错,而采取此宏定义,就很方便和易于维护.
[例子]
#define PI 3.1415926
[注意事项]
(1)    宏定义中的变量,约定俗成用大写,以此与小写的普通变量区分开来.当然如果你故意小写,也是合法的.
(2)    #define的行尾,没有分号”;”,有些人不注意,会画蛇添足地加上.有些公司招聘时候的笔试,也会考察这个细节.
(3)    如果后面的宏定义中的变量和前面的有内在联系,那么后面的宏定义变量最好用前面的表示
[例子]
#define PI 3.1415926
#define RADIUS 5
而在表达该圆的面积的时候,就可以用下面的表示了:
#define AREA ((PI)*( RADIUS)*( RADIUS))
//此处加括号是为了避免后面提到的一种边界效应
********************************************************************************
3.2[缺点]
宏定义有一些缺点:
(1) 无法对宏定义中的变量进行类型检查此缺点,是相对于const变量来说的
[define与const的区别的简单总结]
define定义的变量,是Compile-Time时期的变量,系统在编译时候,就将其全部替换,
而不会对其变量进行类型等属性检查,相对不是很安全,可能存在潜在的问题,而没有发现.
正因为其仅仅是编译时期替换,所以其定义的变量,是不会在运行时候分配内存的,不占用内存空间.
const定义的变量,是 Run-Time时期的变量,如果类型不匹配,系统在运行时候,
就会发现并提示或报错,对应的,const变量在运行时期,也是一种变量,系统会为其分配内存.
(2) 边界效应
A.    未加括号带来的边界效应
由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,
然后经过系统展开后,由于优先级的原因,导致其结果不是你所希望的.
[例子]
#define MUL(A,B) A*B
而在使用的时候,这样的调用:
int a=1,b=2,c=3,d=0;
d=MUL(a+b,c)
经过编译时候展开,就变成了
d=a+b*c
而不是我们所希望的
d=(a+b)*c
[解决办法]
其解决办法也很简单,就是给每个分量,都加上括号,就可以避免此类问题
即,在宏定义的时候,如此定义:
#define MUL(A,B) ((A)*(B))
2008-07-28 10:30
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
你的是#define s "ssss"

所以s代表"ssss"
strcpy(a, s);
就等价于strcpy(a, "ssss");

所以为a[0]='s' a[1]='s' a[2]='s' a[3]='s' a[4]='\0'
2008-07-28 10:31
wangnd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-7-22
收藏
得分:0 
谢谢几位的帮忙
谢谢几位的帮忙
2008-07-28 10:49
快速回复:请教define
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011143 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved