gpt4 book ai didi

c++ - #define for(int z=0;z<2;++z)for(int z=0;z<2;++z)for 中的第三个 'for' 是什么意思

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:01 27 4
gpt4 key购买 nike

我在一个C++程序中找到了一段代码,好像每隔for()循环两次。在这个程序中循环,但为什么在这样的预处理器定义中需要第三个 for 呢?

#define for for(int z=0;z<2;++z)for

最佳答案

它取代了 forfor(int z=0;z<2;++z)for .显然,那会变成

for (int i = 0; i < N; ++i) {
// ...
}

进入

for (int z=0;z<2;++z) for (int i = 0; i < N; ++i) {
// ...
}

因此创建了两个嵌套循环。没有那个额外的 for会是

for (int z=0;z<2;++z) (int i = 0; i < N; ++i) {
// ...
}

这显然是不正确的。

请注意,即使您在问题中提供的形式是“正确的”,但这并不意味着它是“良好做法”。这是过度滥用宏的示例,必须避免。这是它可能出错的众多示例之一:

for (int z = 0; z < 5; ++z) {
for (int i = 0; i < 3; ++i) {
std::cout << z << std::endl; // this will never print 2, 3, 4
}
}

这将扩展为

for (int z=0;z<2;++z) for (int z = 0; z < 5; ++z) {
for (int z=0;z<2;++z) for (int i = 0; i < 3; ++i) {
std::cout << z << std::endl; // this will never print 2, 3, 4
}
}

意味着您现在有四个 嵌套循环,并且内部循环将打印“不可见的”z。而不是 z你已经在外循环中声明了(它成为扩展代码中的二级循环)。

另一个原因:正如@stefan 所指出的,使用关键字或其他众所周知的标识符作为宏名称是一个非常糟糕的主意。让人想起臭名昭著的#define true false .而且,正如@HolyBlackCat 所提到的,它也是未定义的行为,这意味着就标准而言,任何事情 都可能发生。从“看似有效”的代码到与火星人(入侵地球以清除其丑陋代码)的全面第三次世界大战。

关于c++ - #define for(int z=0;z<2;++z)for(int z=0;z<2;++z)for 中的第三个 'for' 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507203/

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