注册 登录
编程论坛 C++教室

求#define祥解

afraidhlq 发布于 2008-03-19 23:59, 1438 次点击
#include<iostream.h>
#define PI 3.1415926
#define FUDGE(R) R+PI
#define PR(a) cout<<"a="<<int(a)<<"\t";
#define PRINT(a) PR(a);cout<<"\n";
#define PRINT2(a,b) PR(a);PRINT(b)
#define PRINT3(a,b,c) PR(a);PRINT(b,c)
#define MAX(a,b) (a<b?b:a)
void main()
{
  {
    int x=2;
    PRINT(x*FUDGE(2));
   }
  {
    for(int cel=0; cel<=100;cel+=50)
    PRINT2(cel,15*cel+32);
  }
  {
   int x=1, y=2;
   PRINT3(MAX(x++,y),x,y);
   PRINT3(MAX(x++,y),x,y);
  }
}
12 回复
#2
PcrazyC2008-03-20 12:57
程序代码:
#include<iostream>//使用新版本的头文件

using namespace std;

#define PI 3.1415926
#define FUDGE(R) R+PI
#define PR(a) cout<<#a"="<<int(a)<<"\t";  //运算符的特殊作用
#define PRINT(a) PR(a)cout<<"\n"
#define PRINT2(a,b) PR(a)PRINT(b)
#define PRINT3(a,b,c) PR(a)PRINT2(b,c)//这个地方少个2,另外一些没必要的";"可以去掉
#define MAX(a,b) (a<b?b:a)
int main()
{
    {
        int x=2;
        PRINT(x*FUDGE(2));
    }
    {
        for(int cel=0; cel<=100;cel+=50)//少一个{}
        {
            PRINT2(cel,15*cel+32);
        }
    }
    {
        int x=1, y=2;
        PRINT3(x,x,y);
        PRINT3(x,x,y);
    }
    return 0;
}
#3
PcrazyC2008-03-20 12:58
#运算符的特殊作用
#4
afraidhlq2008-03-21 16:24
谢谢,不过那程序我又 对照了一启遍
和书一个符号不差,
我抄下来的
书上有;
#5
PcrazyC2008-03-21 19:13
你发的程序是没有错,但估计不是你自己意图,你那个FOR语句的意图肯定是想都循环,但你那样写,只是输出第一个数的时候循环了,后面的一个没有循环.

另外我用了那个#运算符,只是教你一点知识而已,没说你错

书只是用来参考的,真正实践要自己来做
#6
newyj2008-03-21 20:04
在书上看到的 #define T ab 说什么a和b是两个 而 加上 a##b的话就是一个数了
不明白 是什么意思
#好象还有个 是 帮助字符加上双引号的
#还有什么用法吗
还有就是 define 和 typedef 有什么区别
在什么时候用哪个好
define 好象是在预编译期 typedef 是在编译期

[[it] 本帖最后由 newyj 于 2008-3-21 20:08 编辑 [/it]]
#7
aipb20072008-03-22 00:35
#define a b
宏定义,就是把后面出现的a全部替换(字面替换)成b
还可以定义成一个类似函数的操作(不很了解)

楼上
typedef是类型定义,与#define完全没关系,没什么可比。
#8
PcrazyC2008-03-22 19:20
在书上看到的 #define T ab 说什么a和b是两个 而 加上 a##b的话就是一个数了

//a##b的作用是将ab连接在一起,成为一个标识符,如果你的源码里没有这个标识符的话,就会编译出错,假如你的代码里有很多变量(标识符),类似于这样,X1,X2,X3,X4...;如果你要用循环语句进行赋值或其它操作时,你可以这样:
#define X(a) X##a

for(i=1;i<=n;i++)//n已定义
X(i)=i;//这样就分别给X1,X2....都赋值了,你可以自己试一下,我现在在外地,不在寝室,没编译器
#9
newyj2008-03-22 19:53
谢谢 回答 那要是 不加上#的话 那 ab 有是什么意思
#10
PcrazyC2008-03-22 23:08
那就是将T用ab代替,简单的替换
#11
newyj2008-03-23 11:45
那为什么还要加上#呢
#12
飞过2008-03-23 12:07
数据库(C++)
利用栈(stack)的基本操作(假设已有,直接利用即可),写一算法,完成十进制数n向P进制数(P在2-9之间)的转换。
     接口建议:  void  nToP(int n)  
                  或:void  nToP(int n,int p)  
     转换后直接输出到屏幕, 格式如:
                14=1110         6=110
#13
shizhy2008-03-24 09:41
那是高人
1