| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1217 人关注过本帖
标题:c友们,有个小困惑,麻烦指点指点!
只看楼主 加入收藏
ylx
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
c友们,有个小困惑,麻烦指点指点!
谭浩强爷爷编的那本C语言书中说不带参数的宏定义将指定的标识符来代替一个字符串,那么:
          #define PI 3.1415926
PI就是字符串了,那参与运算又是啥类型,double?
搜索更多相关主题的帖子: 困惑 麻烦 
2010-08-14 19:28
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:1 
PI的数据类型和后面的数据类型是一致的,应该是float吧,不是字符串~~~

[ 本帖最后由 mxs810 于 2010-8-14 19:39 编辑 ]

授人以鱼不如授人以渔
2010-08-14 19:34
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:10 
回复 楼主 ylx
PI是在编译前就会替换成 3.1415926 所以,运行时候没有 PI的影子,也就没有类型的问题 所以C将之称为“符号常量”,见到PI 就当成 3.1415926   ,我们定义 PI 只是为了程序中书写方便以及跟我们在数学中的习惯接轨!
如果非要问类型的话,那就要看换成的内容是什么形式,然后再判断类型也不迟!
符号常量:用标识符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
使用符号常量的好处是:
  含义清楚;
  能做到“一改全改”。


[ 本帖最后由 jack10141 于 2010-8-14 19:43 编辑 ]

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-08-14 19:40
Rexfield
Rank: 6Rank: 6
来 自:幻想乡
等 级:侠之大者
威 望:1
帖 子:240
专家分:484
注 册:2010-7-28
收藏
得分:2 
那玩意就像记事本中的替换功能,就是多了个词法分析的步骤。

你可能把宏替换和Const常量搞混了

#define a 1

const int a=1

If you're not failing every now and again, it's a sign you're not doing anything very innovative.
2010-08-14 19:43
新浪
Rank: 3Rank: 3
来 自:水星
等 级:论坛游侠
威 望:1
帖 子:770
专家分:167
注 册:2008-6-10
收藏
得分:1 
不是为了书写方便,是为了看的方便,也为了以后改的方便。
你想,是写个 #define PI 3.1415926, 再写个 PI快呢? 还是直接来个 3.1415926快呢?
当然是 直接来个 3.1415926快喽。

天下皆醒,唯我独醉;  天下皆白,唯我独黑
2010-08-14 19:45
ylx
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-12
收藏
得分:0 
回复 3楼 jack10141
三楼说法似乎有道理,但我在机上试过下面三种情况按照你那样说只有第一个符合咯:
         printf("  %f\n",pi);  --> 3.141593
         printf("  %c\n",pi);  --> ?
         printf("  %f\n",pi);  --> 崩溃
谭老说的好像挺费解的! 应该还是只能理解为浮点数吧
2010-08-14 23:17
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
你就把这三句看成:
         printf("  %f\n",3.141593i);
         printf("  %c\n",3.141593);
         printf("  %f\n",3.141593);
再开始理解。就行了,而且我没看出第一句和第三句有什么区别,为什么第三句会崩溃呢?第二句也不应该是 '?' 吧?

预处理是发生在编译之前的,编译器也只能看见替换之后的东西。就是说编译看见语句的时候,以经是我写的那个样子了。
在编译之前没有类型的概念,不用在这纠缠这些问题。
2010-08-14 23:31
ylx
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-12
收藏
得分:0 
回复 7楼 pangding
不好意思第三句是printf("%s",pi);我是针对三楼说的pi的类型视情况而定!

[ 本帖最后由 ylx 于 2010-8-15 00:13 编辑 ]
2010-08-15 00:10
husiwen
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:227
专家分:1125
注 册:2010-5-23
收藏
得分:1 
书不全对。。。自己能明白就好
2010-08-15 02:05
kevin_zh
Rank: 4
来 自:农村
等 级:业余侠客
威 望:1
帖 子:129
专家分:250
注 册:2010-8-14
收藏
得分:0 
刚学c,来看看高手们的回答

"please input a number :\n"
2010-08-15 08:51
快速回复:c友们,有个小困惑,麻烦指点指点!
数据加载中...
 
   



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

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