我需要解释一下这个C ++代码的行为和返回值
#include<iostream>
using namespace std;
#define MY_MACRO(n) #n
#define SQR(x) x * x
int main()
{
//cout<<MY_MACRO(SQR(100))<<endl;
//cout<< sizeof(SQR(100))<<endl;
cout<< sizeof(MY_MACRO(SQR(100)))<<endl;
return 0;
}
到目前为止我担心#n
会返回MY_MACRO(n)
中的参数数量但是如果之前SQR(100)
将被100 * 100
替换(如果我们计算空格则为9个字符) )但现在sizeof(9)
应该打印4但是它返回9 cout<< sizeof(MY_MACRO(SQR(100)))<<endl;
背后隐藏着什么?
答案 0 :(得分:6)
您没有使用#n
的正确定义。这不是争论的数量。它使它成为一个字符串。
答案 1 :(得分:6)
宏替换后,您的代码将转换为
sizeof("SQR(100)");
将给出9作为字符串文字的大小,包括终止'\0'
。
#n
将使参数成为字符串,而不是参数的数量
例如:
#define display( n ) printf( "Result" #n " = %d", Result##n )
int Result99 = 78;
display( 99 ) ; // Will output -> Result99 = 78