C语言 define 带参数的宏替换

#include<stdio.h>voidprint(){printf("hello\n");}intmain(){#defineprint()((void)(3))pr... #include<stdio.h>
void print( )
{
printf("hello\n");
}
int main( )
{
#define print( ) ((void)(3) )
print( );

return 0;
}
问题一:(void)(3)该如何替换掉print( ),这个替换的细节能否叙述得详细一些?
问题二:若改为(void) ( ),结果又是如何?
只有15分了,期待着您的解答,谢谢!
展开
 我来答
veket的小号
2014-02-25 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:4000万
展开全部

楼主 来看看 gcc 预处理命令得到的结果吧    结果是 把整型3 强制转换为 void 类型的 一个表达式

把3 去掉编译就报错了

xoaxa
2014-02-25 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3495万
展开全部
#include<stdio.h>

void print() {
    printf("hello\n");
}

int main( ) {
// 定义在main()内部的宏,编译时,将用((void)(3))替换print()
#define print()  ((void)(3))
    // 不会调用函数void print(),而是替换为((void)(3)),不会显示任何内容。
    print();
    return 0;
}
追问
您好,我还想继续问一下,那编译后是否为:
int main( )
{
(void) 3;

return 0;
}
这条(void)3;语句的写法合法吗?
追答
是的,通过编译没有问题,只是没有任何作用而已。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式