![]() |
1
92
它是在VisualC++(V6.0和更早版本)的旧版本中修复错误。过去,VisualC++已经打破了声明内部变量的范围规则。
换句话说,Visual C++给出了
为了解决这个问题,有些人使用这个宏(或非常相似的等效宏):
这改变了
这使
还要注意,如果宏的定义是这样的:
然后,尽管这对一些简单的代码也会产生同样的效果,但它会突然导致以下代码被错误地编译:
因为如果展开宏,会得到:
以及
作为最后一点,
|
![]() |
2
7
根据快速搜索,这是MSVC中克服的一个错误。 据我所知, for(int i=0...){.....} //later at the same scope level in the same function for(int i=0...){...} 将导致重新定义“i”错误。 如果for语句包含在if语句中,编译器将按其应该的方式工作,这样就不会出现重新定义错误(显然它解释了“if”而不是“for”的作用域级别) |
![]() |
3
2
因为MSVC编译器在默认情况下错误地处理在for语句中声明的变量范围。为了避免这种行为,您必须关闭Microsoft扩展,然后使MS头不能编译。 我使用(是的,我仍然使用VS6)一个不在VS6中引起警告的方法,尽管英特尔编译器仍然会发现它。
我不记得是从哪里弄来的,但我怀疑是我发明的;-) 我知道其他答案已经说了大部分,但弹出窗口说要确保你回答了这个问题。 |
![]() |
4
1
已经描述了效果。 其原因是将C++代码移植到MSVC。或者,如果您希望C++代码平台独立,它也是非常有用的。例如,您在Linux/MacOSX上开发了它,现在想在MSVC中编译它。 这对于C++本身也是非常有用的。例如:
我已经看到了MSVC代码,它通过执行以下任一操作来解决这一问题:
或:
在这两种情况下(IMO)都不太好。这一定义是一个小的黑客行为,使MSVC行为更规范。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 7 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 8 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 8 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 8 月前 |