#include<iostream>
int func(int, int);
#define func(x,y) x/y+x
int main()
{
int i, j;
scanf("%d", &i);
scanf("%d", &j);
printf("%d ", func(i + j, 3));
printf("%d\n", func(i + j, 3));
}
int func(int x, int y) {
return y / x + y;
}
应该在此代码中添加什么,以便第一个输出是宏的结果,第二个输出是函数的结果?
答案 0 :(得分:11)
几种方法:
printf("%d ", func(i + j, 3)); // Macro call
#undef func // Macro is no longer defined
printf("%d\n", func(i + j, 3)); // Function call
或
printf("%d ", func(i + j, 3)); // Macro call
printf("%d\n", (func)(i + j, 3)); // Function call
答案 1 :(得分:2)
另一种方式:
a <- data.frame(one=1:3, two=4:6, three=7:9)
write.csv(a, 'a.csv', row.names=F)
read.csv('a.csv')
one two three
1 1 4 7
2 2 5 8
3 3 6 9
在Boost.PP中可以看到,#define EMPTY
printf("%d\n", func EMPTY (i + j, 3));
宏“消耗”了扩展迭代,并且生成的EMPTY
保持不变。
答案 2 :(得分:0)
一种解决方案是
printf("%d\n", (&func)(i + j, 3));
(&func)
使用函数func
的地址。由于它的格式不为func()
,因此没有宏替换。由于可以调用函数指针,因此行为符合预期。