关于宏,顺祝中秋快乐!来者有分.

bluejugar 2004-09-28 11:10:45
Link.h

#ifndef _LINK_H_
#define _LINK_H_

#define begin int main(void){
#define end }

#endif /*_LINK_H_*/

Link.cpp
#include "Link.h"
#include <iostream>
using namespace std;

begin
return 0;
end

这样在VC.NET2003下不过.
将Link.cpp换成:
#include <iostream>
using namespace std;
#include "Link.h"
begin
return 0;
end
就OK了.

顺便送个月饼给大家:
≈≈≈≈≈≈≈≈≈≈≈≈
≈≈≈≈≈≈≈≈≈≈≈≈
≈≈≈ ≈≈≈≈
≈≈ ≈≈≈
≈ ≈≈
≈ ≈≈
≈ ≈≈
≈ ≈≈
≈ ≈≈
≈≈ ≈≈≈
≈≈≈ ≈≈≈≈
≈≈≈≈≈≈≈≈≈≈≈≈
≈≈≈≈≈≈≈≈≈≈≈≈


...全文
149 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
coyprightbao 2004-09-29
  • 打赏
  • 举报
回复
up!拿分的。
bluejugar 2004-09-29
  • 打赏
  • 举报
回复
这个我明白,我想知道的是相比于#include <...>/"...".
在编译级别,系统都干了些什么?
pacman2000 2004-09-29
  • 打赏
  • 举报
回复
没事不要乱用#define
sodangerous 2004-09-29
  • 打赏
  • 举报
回复
命名冲突
hetianxu 2004-09-29
  • 打赏
  • 举报
回复
向楼主学习~~~~~~~~~~~~~~~~~~!!
qw2002qw 2004-09-29
  • 打赏
  • 举报
回复
学习
sharkhuang 2004-09-29
  • 打赏
  • 举报
回复
预编译出来看看吧
wangzhanlili 2004-09-29
  • 打赏
  • 举报
回复
up
51flyou 2004-09-29
  • 打赏
  • 举报
回复
我仅要分
xzgyb 2004-09-29
  • 打赏
  • 举报
回复
哦,不好意思,没看到freefalcon(心宇—小小菜鸟想高飞)的回复,呵
freefalcon 2004-09-29
  • 打赏
  • 举报
回复
我前面说“宏定义的名字一定要特殊,不要和其他名字相冲突”,是指如果宏名字与其它标识符一致的话,那么后者会被进行宏替换,所以这里说“冲突”二字还不太合适
xzgyb 2004-09-29
  • 打赏
  • 举报
回复
打开project settings,在C/C++页加上/EP,然后编译,预处理器的结果会输出到下面的输出窗口中
对于
#include "Link.h"
#include <iostream>
using namespace std;
预处理器把iostream中是begin和end的都替换成你的宏了所以出错
#include <iostream>
using namespace std;
#include "Link.h"
而这样写,是先处理iostream,然后再link.h
freefalcon 2004-09-29
  • 打赏
  • 举报
回复
相比于#include <...>/"...".
在编译级别,using ....都干了些什么?

在代码方面,using什么也没做,它就是告诉编译器你需要打开某个命名空间,编译器首先会查看是否有这个命名空间的定义,以确定你的using语法是否正确,然后在编译到相关函数或者类的使用时,编译器会把这个名字空间里同名的函数或者类作为候选者之一

你这里的问题跟using没有多大关系
主要是要明白#include都作了什么,它相当于把头文件里的代码都复制过来,你在#include之前定义宏begin,那么头文件里的begin都被替换了

关于预处理,可以参考废人的大作——编译与链接
http://community.csdn.net/Expert/TopicView.asp?id=3410946
逸学堂 2004-09-29
  • 打赏
  • 举报
回复
相比于#include <...>/"...".
在编译级别,using ....都干了些什么?
````````````````````````````````````
#include <iostream> //
using namespace std;// 包括标准模板库的命名空间
表示应用标准模板库中的输入输出流

至于宏的问题。还真的没有相通,大概是在命名空间中有冲突吧!
你看看这样写是不是也报错
#include <iostream>
#include "Link.h"
using namespace std;
如果报错。那就说明是命名(有的说名称)空间里和beign,end有冲突。
因为在标准库中,begin,end都是一个范性函数
或者把begin,和end换成不可能于系统冲突的名字试一试!
或者你把
#include <iostream>
using namespace std;
去掉换成
#include <iostream.h>
newpuple 2004-09-29
  • 打赏
  • 举报
回复
#define begin int main(void){
这样定义会不会有问题,我也不大清楚,帮你顶
fanbonbon 2004-09-29
  • 打赏
  • 举报
回复
不懂-_-
帮你顶下
caoyuflyin21st 2004-09-29
  • 打赏
  • 举报
回复
接分
中秋快乐!
insulator 2004-09-29
  • 打赏
  • 举报
回复
为了升级,厚着脸皮讨分了
xuzheng318 2004-09-29
  • 打赏
  • 举报
回复
学习中,帮顶,接分
bluejugar 2004-09-29
  • 打赏
  • 举报
回复
相比于#include <...>/"...".
在编译级别,using ....都干了些什么?
加载更多回复(1)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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