0

我在 C++ 中有这段代码:

#include <string>
#include <iostream>

int const foo = 1;
int const bar = 0;

#define foo bar
#define bar foo

int main()
{
  std::cout << foo << std::endl;
  std::cout << bar << std::endl;
}

它产生这个输出:

bash-3.2$ ./a.out
1
0

我不明白为什么这是输出。

4

1 回答 1

11

宏永远不会递归扩展。

当您编写foo时,它首先展开为bar,然后因为bar是一个宏,所以它展开回foo。Whilefoo是一个宏,因为宏不能递归,所以它不会被扩展。然后评估foo产生它的价值:1。

也是如此bar

看到这个: http: //gcc.gnu.org/onlinedocs/cpp/Self_002dReferential-Macros.html#Self_002dReferential-Macros

以及ISO/IEC 14882:2003(E) 16.3.4标准的重新扫描和进一步替换部分。(更多细节见评论)

于 2013-01-31T20:04:29.700 回答