宏类型的大小?

Size of macro type?

我想知道我可以在宏表达式中键入的最大数字是多少,直到它溢出。我写了下面的程序:

#define I (INT_MAX + 1)
#define J (LONG_MAX + 1)

int main()
{
    cout << INT_MAX << I  << endl;
    cout << LONG_MAX << J << endl;
    return 0;
}

我得到以下输出:

2147483647-2147483648
9223372036854775807-9223372036854775808

我不明白 int 情况下的溢出,如果它可以存储 LONG_MAX 的值。然后我想起宏也可以存储小数,例如3.14(PI),所以它应该是float类型。 我现在很困惑。请帮忙

宏没有类型。它们根本不与类型系统交互。宏是编译前执行的预处理步骤的一部分。宏是文本替换。你的源代码经过预处理后,编译器看到的结果如下:

int main()
{
    cout << INT_MAX << (INT_MAX + 1)  << endl;
    cout << LONG_MAX << (LONG_MAX + 1) << endl;
    return 0;
}

... 除了 INT_MAXLONG_MAX 本身就是宏,所以它们也会作为预处理的一部分扩展为一些整数文字。确切的值是特定于实现的,并且可能因系统而异,所以我没有在这里扩展它们以使答案保持通用。

P.S。由于有符号溢出,程序的行为未定义。