【发布时间】:2014-03-02 10:19:09
【问题描述】:
我需要稍微解释一下这个 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;
它背后的陷阱是什么?
【问题讨论】:
-
每个字符被视为一个字节。
-
查看预处理器的输出(如果您使用的是 g++:g++ -E)。然后你会看到 cout
-
@Rikayan 但是在这里,如果您看到宏会将 100 * 100 替换为 9 (
MY_MACRO(n) #n),那么它将是 sizeof(9) -
@MichaelBrennan 它返回 4
-
那么你想要先将SQR(100)扩展为100 * 100,然后将that变成字符串?