For 循环中的局部变量为什么可以拿出来用?

查阅HexEditor插件的时候发现如下代码,括号内定义的局部变量为什么可以拿出来用?

/* i 是局部变量 */
for (UINT i = 0; i < length; i++)
{
}
for (i = 1; i <= max; i++)

有时候又不可以,会报r j S 7 j 7错,是怎样配置VS使得VS支持或不支持以上“特性”?

补充图片f U % C d I n:c++设置

For 循环中的局部变量为什么可以拿出来用?

/GS /analyze- /W4 / 7 b 9 # } /FAu /Zc:wchar_t /I"../../src" /I"../../src/9 4 I tHelpDlg" /I"../../src/M8 k % K [ISC" /I"../../src/OptionDlg" /I"../../src/UserDlg" /I"../../../Common/Ccpp" /I"../../../NativeLang/src" /Od9 { { t R % /Fd"Debug\vc142.pdb" /Zc:iv 5 , & Q s Dnline /fp:precise /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "HEXEDITOR_EXPORTS" /D "_WINDLX ! eL" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope- /RTC1 /Gd /Oy- /MDd /FC /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\HexEditor.pch" /diagnostics:column

link设置

/OUT:"D:\Down; . H 4 0 C O yloads\npp.7.8.9.bin\plugins\HexEditor/HexEditor.dll" /MANIFEST /NXCOM] o j f DPAT /PDB:"Debug\HexEditor.pdb" /DYNAMICk R H J h .BASE "shlwapi.lib" "kernel32.lc % } T ) Z 6 .ib" "user32.lib" "gdi32O L j S B.lib" "winspool.lib" "comdlg32.lib" "adC 8 a + ] Wvapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "od4 = 3 v I t bccp32.lib"6 _ O O J N /IMPLIB:"Debug\HexEditor.lib" /DEBUG /DLL /MACHINE:X86 /SAFESEH /INCREMENTAL /PGD:"Debug\HexEditor.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\HexEditor.dll.intermv D L l } C u kediate.manifest" /ERRORREPORT:PROMPT /NOLOGOK = A /TLBID:1

回答

不同的编译器不同。早期的编译器,会把UINT i放在全局作用域上。现在的编译器不会。
在VC++ 66 w _ e y.0时代
for (int i = ...)
{
...
}
for (int i = ...)
{
...
}
这代码是不能编译的,会说i重复y L u b定义。