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

aretas_pau

我在C ++程序中找到了一段代码,似乎for()该程序的每个循环都循环两次,但是为什么在这样的预处理器定义中需要三分之一呢?

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

谢尔盖·塔切诺夫(Sergei Tachenov)

替换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所提到的,它也是未定义的行为,这意味着就该标准而言,任何事情都可能发生。从“看似有效”的代码到与火星人(入侵地球以从丑陋的代码中清除地球)的全面的第三次世界大战。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回z <0的结果是什么?z + y:z是什么意思?

在MATLAB中dZ(1)= Z(2)是什么意思?

“Z4mainE2”是什么意思?

SAS中的.Z是什么意思?

-z在Bash中是什么意思?

x?.y?.z是什么意思?

在pm2日志格式“ YYYY-MM-DD HH:mm Z”中,“ Z”是什么意思?

Shell脚本:-z在Shell脚本中是什么意思?

bash中的“ x [y] =([z] = w)”是什么意思?

语法 m = z<p 在 python 中是什么意思

Z3 的这个输出是什么意思?

[AZ]是什么意思[A-Za-z]?

CSS负z-index:是什么意思?

"struct{...} x, y, z;" 是什么意思 吝啬的?

当 awk $n param 以 z 结尾时是什么意思?

Unix时间戳“ 120314170138Z”中的“ Z”是什么意思?

汇编代码中的“ int 0x2A”是什么意思

“ yyyy-mm-ddT00:00:00.000Z”的“ .000Z”是什么意思?

numpy-为什么Z [(0,2)]是视图而Z [(0,2),(0)]是副本?

*(* int)(nil)= 0在golang中是什么意思?

/\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/ 什么意思?

“ / *重载元素数据类型* / #define OE_IS_ARRAY(1 << 0)#define OE_IS_OBJECT(1 << 1)#define OE_IS_METHOD(1 << 2)”是什么意思?

x [x <2] = 0在Python中是什么意思?

x % 2 > 0 在java中是什么意思?

在Linux脚本上的if表达式中,-z值是什么意思?

openssl CA数据库中的“ 300222061712Z”是什么意思?

Linux Shell脚本中的-z和-o命令是什么意思?

逗号在构造中(x = x || y,z)是什么意思?

bash 脚本中的 z${variable} 和 zfalse 是什么意思?