需要解释C ++代码的行为

时间:2014-03-02 10:19:09

标签: c++ gcc c++11 macros

我需要解释一下这个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;

背后隐藏着什么?

2 个答案:

答案 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