`
simohayha
  • 浏览: 1388984 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

诡异的宏问题

阅读更多
#include <stdio.h>
#define f(i) {printf("%d",i);}

void main()
{
	f(5);
}


这个会打印出5;
然后紧接着修改程序;
#include <stdio.h>
#define printf_ex(x) printf x

void main()
{
	f(5);
}


这个竟然不会出错,还会打印出5;

#include <stdio.h>
#define printf_ex(x) printf x
void main()
{
	f(5);
	printf_ex(8);
}


这时就会出错了,我的编译器是vc6,请问这是什么问题?是与预处理器相关吗?还是编译器的问题.
分享到:
评论
2 楼 simohayha 2007-05-15  
cl.exe 时会出错,显示没有f这个定义,可是在ide里面编译什么的都能通过.
1 楼 bigpanda 2007-05-15  
我用VC 2005编译你第二个linker出错。没有f的定义。

编译第三个出错。

cl.exe有个开关/P

cl.exe /P prog.c

会生成一个叫prog.i的文件,那是预处理结果。#include这句搞的好大,所以可以把这句去掉。可以看看你的宏预处理完是什么样。

g++下面也有类似的开关。

VC 6开关如果不是这个可以查查手册。

要是template也有个这个就好了,看看template instanization生出来到底是什么代码。

相关推荐

Global site tag (gtag.js) - Google Analytics