关于#define for if(false);else for

本文探讨了VC6.0中for循环作用域的一个特殊行为,并介绍了一个兼容性定义技巧,即通过预处理器指令#defineforif(false);elsefor来解决变量作用域问题。该技巧有助于避免因编译器差异导致的代码不一致问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日在看一个第三方代码时看到了#define for if(false);else for 这样的一种定义,不明白这样用法的目的,于是查了一下。

这是一个兼容vc6.0的用法,csdn上有这个问题的回答http://bbs.youkuaiyun.com/topics/40398205

因为自从毕业以后就几乎没接触过vc6了,还真不知道有这么一回事,vc6中 for表达式的作用域居然违背了c++标准。

如:

for (int i = 0 ; i < 5; i++)

{

  cout << i;

}

i = 2;

照理说,最后i = 2,编译器会认为是变量未定义,但vc6却认为 i 已经在for循环中定义了。

所以把 for 定义为 if(false);else for 之后,上诉代码就会展开为

if (false);

else

  for (int i = 0 ; i < 5; i++)

  {

    cout << i;

  }

  i = 2;

相当于在for外层包了一层{}

这个问题让我想起一次面试的时候,看到一道类似的在for循环外,用到了i变量的题目,我当时还以为题目出错了,万万没想到还真有这么任性的编译器

转载于:https://www.cnblogs.com/riversHahaha/p/5434909.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值