关于C++宏定义问题

//问错了,不在C/C++分类里
#include <iostream>
#include <string>
#include <limits>
using namespace std;
void text() {
#define MACRO_
while ( MACRO_ != "Exit") {

#ifdef MACRO_
#undef MACRO_
#endif

#define MACRO_ << cin
MACRO_ MACRO_maxvalue = numeric_limits<MACRO_>::max();
cout << "MACRO_maxvalue = " << MACRO_maxvalue << "\n";
MACRO_ MACRO_minvalue = numeric_limits<MACRO_>::min();
cout << "MACRO_minvalue = " << MACRO_minvalue << "\n";
s = MACRO_
}
}

int main() {
text();
}

/*
晕,搞了半天,还是不行,报了一堆的错,大家帮我改代码,谢谢了。
c.cpp
c.cpp(7) : error C2059: 语法错误 : “!=”
c.cpp(7) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
c.cpp(14) : error C2143: 语法错误 : 缺少“;”(在“<<”的前面)
c.cpp(14) : error C2947: 应由“>”终止 模板参数列表,却找到“<<”
c.cpp(14) : error C2976: “std::numeric_limits”: 模板 参数太少
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\limits(99) : 参见“std::numeric_limits”的声明
c.cpp(15) : error C2065: “MACRO_maxvalue”: 未声明的标识符
c.cpp(16) : error C2143: 语法错误 : 缺少“;”(在“<<”的前面)
c.cpp(16) : error C2947: 应由“>”终止 模板参数列表,却找到“<<”
c.cpp(16) : error C2976: “std::numeric_limits”: 模板 参数太少
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\limits(99) : 参见“std::numeric_limits”的声明
c.cpp(17) : error C2065: “MACRO_minvalue”: 未声明的标识符
c.cpp(18) : error C2065: “s”: 未声明的标识符
c.cpp(18) : error C2059: 语法错误 : “<<”

*/
s = MACRO_
那是后来改的,没删。呵呵。我想要他输出我从建盘输入的类型的最小和最小值呀。

第1个回答  2010-07-23
#define MACRO_
改为#define MACRO_ "Exit"

下面这个地方真的让偶百思不得其解了
#define MACRO_ << cin
你到底要把MACRO_定义为什么东东啊,如果把MACRO_定义为int这样的内置类型,则中间的一堆语句可以解释,那么s=MACRO_又何解?如果想把MACRO定义为一个常量,那么s=MACRO_以上的语句又何解啊。真是高人啊

那这样改就行了
#define MACRO_ << cin
改为
#define MACRO_ cin>>

下面一句也要改
MACRO_ MACRO_maxvalue = numeric_limits<MACRO_>::max();
需要改为两条语句,如下
MACRO_maxvalue = numeric_limits<MACRO_>::max();
MACRO_ MACRO_maxvalue; //注意MACRO_后面有一个空格

同理
MACRO_ MACRO_minvalue = numeric_limits<MACRO_>::min();
也要改为两条语句
MACRO_minvalue = numeric_limits<MACRO_>::min();
MACRO_ MACRO_minvalue ;

彼人对你的MACRO_minvalue = numeric_limits<MACRO_>::min();这条语句还是不够理解,如果这条语句表示使用=后面的东东去初始化MACRO_minvalue的话,则上面的修改方示就没有错。如果是其他用途,那就不好整了

记住一条简单规则就行:#define是简单的替换,比如
#define MACRO_ cin>>
那么语句MACRO_ MACRO_minvalue ;会被替换为
cin>> MACRO_minvalue;
因此其意思就是输入MACRO_minvalue的值。本回答被提问者采纳
第2个回答  2010-07-23
很简单
你先把完整的代码写出来
然后再把需要定义为宏的代码位置处做个标记 并把该代码删除
然后再定义你的宏 然后再把所有的标记换成你的宏明 就万无一失了
第3个回答  2010-07-23
#define MACRO_
这里定义了一个空的宏

while ( MACRO_ != "Exit") {
这里经过宏替换之后就会变成:
while ( != "Exit") {

显然会编译不通过。

你定义该宏的目的是什么?要实现什么机能?
第4个回答  2010-07-23
楼上的都说的挺好的

宏是用来定义常量的

比如: #define PI 3.14
第5个回答  2010-07-23
同意楼上,用C++就尽量不用宏,这是优秀的编程习惯
相似回答