【问题标题】:I don't understand macros [duplicate]我不懂宏[重复]
【发布时间】:2018-04-15 17:27:16
【问题描述】:

我无法理解 C++ 中的那些宏...我从许多视频和人们那里听说他们的工作是用您定义的名称替换他们的名字。 例如:

#include <iostream>
#define say std::cout<<

int main()
{
    say "Hello World";
}

但我已经看到很多代码可以做到这一点

#include <iostream>
#define say

如果你不明白我在说什么,他们会跳过定义的第二部分......为什么?

【问题讨论】:

  • 注意:您很少需要宏。在大多数情况下,它们对于这项工作来说是一个坏/错误的工具,您应该只编写一个函数。
  • 第一个代码是合法的,但是品味很差

标签: c++ macros


【解决方案1】:

语句#define say std::cout&lt;&lt; 是一个宏。 macro namesaymacro bodystd::cout&lt;&lt;。所以当preprocessor 会看到 macro name 它会替换为 macro body

在预处理阶段,您的代码如下所示

int main() {
 std::cout<< "Hello World";
 return 0;
}

只需运行 g++ -Wall -E test.cpp 并检查自己。

案例2: #define say

这里没有macro body,所以它什么都没有。在预处理器阶段,您的代码如下所示

int main() {
 "Hello World";
 return 0;
}

【讨论】:

  • 可能想在你的回答中添加他问题的另一部分,他问#define say 单独意味着什么。
  • 这意味着没有宏体,所以我认为它替换为空格。
  • 第二种情况比较常用,可以用#ifdef测试一下。
  • 是的,我同意 @NeilButterworth 检查是否定义了 macro,请使用 #ifdef
猜你喜欢
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多