C语言 define 带参数的宏替换

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

return 0;
}
问题一:(void)(3)该如何替换掉print( ),这个替换的细节能否叙述得详细一些?
问题二:若改为(void) ( ),结果又是如何?
只有15分了,期待着您的解答,谢谢!

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

把3 去掉编译就报错了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-25
#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;语句的写法合法吗?

追答

是的,通过编译没有问题,只是没有任何作用而已。

本回答被提问者采纳
相似回答