Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5年前关闭。
                                                                                            
                
        
我正在为我的大学处理非常奇怪的任务。目的是编写功能实现,如下所示:

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行中看到的那样。在预期值(?)6上打印了“ 2 + 4”,因此可以通过使用宏#选项来完成,但我不知道如何处理toSquare( 2 + 4),结果是2 + 4到平方是16。感谢所有想法和解决方案!
干杯

最佳答案

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


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


这将产生以下宏:

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


这是working example

关于c++ - C语言中特定于toSquare的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26702922/

10-13 07:25