特定于C中的平方函数

Specific toSquare function in C

本文关键字:方函数 函数      更新时间:2023-10-16

我正在为我的大学处理一项非常奇怪的任务。目标是为如下所示的功能编写一个实现:

int z = 3;
toSquare(2);
toSquare(6);
toSquare(Incr(z));
toSquare(2+4);       
/* result : 
2 to square is 4.
6 to square is 36.
Incr(z) to square is 16.
2+4 to square is 16.
*/

正如你在第10行看到的那样,我在考虑使用宏2+4’是根据预期的(?)6打印的,所以可以使用宏#选项来完成,但我不知道如何处理它到平方(2+4),结果是2+4到平方是16。感谢所有的想法和解决方案!干杯

正确答案涉及以下两个原则:

  1. 使用宏进行字符串化:这就是#预处理器运算符的作用
  2. 使用狡猾的括号来操纵参数扩展。注意,(2+4) * 2+4等于16。因此,请将第一个操作数用括号括起来,但不要将第二个操作数括起来

这会产生以下宏:

#define toSquare(x)    
    std::cout << #x << " to square is " << (x) * x << std::end;

下面是一个工作示例。

使用宏TOSQUARE:的C中的解决方案

#define TOSQUARE(x) ((x)*(x))
int main()
{
   int z = 3;
   TOSQUARE(2);
   TOSQUARE(6);
   TOSQUARE(Incr(z));
   z = TOSQUARE(2+4); 
   return 0;
}