Jba*_*d26 0 c++ c-preprocessor
我在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;
}
Run Code Online (Sandbox Code Playgroud)
它产生这个输出:
bash-3.2$ ./a.out
1
0
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是输出.
Pub*_*bby 11
宏永远不会递归扩展.
当你写的时候foo
,它会首先扩展为bar
,然后再bar
扩展回宏foo
.虽然foo
是宏,但由于宏不能递归,因此不会进行扩展.然后评估foo
产生其价值:1.
同样的道理bar
.
请参阅:http://gcc.gnu.org/onlinedocs/cpp/Self_002dReferential-Macros.html#Self_002dReferential-Macros
和ISO/IEC 14882:2003(E)16.3.4标准的重新扫描和进一步替换部分.(有关更多详情,请参阅评论)