如何在 cout 中连接预处理器常量和文字字符串

How to concatenate the preprocessor constant and a literal string in cout

我开始学习 C++,当我尝试计算宏时,它会在控制台中打印值,但是当我尝试使用另一个字符串文字来计算宏时,它会引发错误。

#include <iostream>
using namespace std;

#define PI 3.14;
int main()
{
    cout<<"Value of PI: " << PI;
    cout<<"Value of PI: " << PI << endl;
}

main函数中第一行完美运行,但第二行在编译时出现错误。

错误:

error: expected primary-expression before '<<' token cout<<"Value of PI: " <<PI<<endl;

我做错了什么?

问题是你在宏的末尾有一个分号。

这一行

cout<<"Value of PI: " << PI << endl;

然后变成:

cout<<"Value of PI: " << 3.14; << endl;
//                           ^

所以,去掉宏末尾的;即可:

#define PI 3.14

您也可以使用适当的常量代替宏(通常是首选):

inline constexpr double PI = 3.14;

或使用在 C++20 中添加的 mathematical constants 库部分:

#include <numbers>

int main() {
    std::cout<<"Value of PI: " << std::numbers::pi << '\n';
}