gpt4 book ai didi

c++ - C++ 中的预处理器解析

转载 作者:可可西里 更新时间:2023-11-01 18:02:26 25 4
gpt4 key购买 nike

如果我们想使用用户输入在程序中做某事,或者打印我们需要的结果

 #include <iostream>

否则,coutcin 将不会被编译器识别。但是命令#include 是一个预处理器命令。当我编写程序时,发生了以下情况。我写了以下代码:

#define PRINT_DEBUG_INFO(a) {cout << “Info: ” << a << endl;}
#include <iostream>

并且没有弹出任何错误。如何在包含 iostream 之前使用 cout?即使我在不​​包含 iostream 的情况下声明 PRINT_DEBUG_INFO(a),我也不会遇到编译错误。
有人可以向我解释为什么会这样吗?

最佳答案

预处理器不需要评估任何 C++ 声明的符号来完成它的工作。

因为是纯文本处理,所以定义一个像这样的宏

#define PRINT_DEBUG_INFO(a) {cout << “Info: ” << a << endl;}

并像这样扩展它

#include <iostream>

void foo {
int a = 5;
PRINT_DEBUG_INFO(a);
}

会变成

// All the literal stuff appearing in <iostream>

void foo {
int a = 5;
{cout << “Info: ” << a << endl;};
}

因此在宏的定义或扩展期间,没有任何关于正确 C++ 语法的检查。

C++ 编译器将进一步处理这些语句,编译器会提示 cout 未在全局范围内声明。

要解决这个问题,声明你的宏

#define PRINT_DEBUG_INFO(a) {std::cout << “Info: ” << a << std::endl;}

关于c++ - C++ 中的预处理器解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41911239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com