3 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
你采納的那個(gè)答案沒回答問題的核心。
C語(yǔ)言的C99標(biāo)準(zhǔn)中,for語(yǔ)句小括號(hào)中的第一個(gè)部分可以是表達(dá)式,也可以是聲明(所以你可以在這里定義一個(gè)類型),之前的老標(biāo)準(zhǔn)中這里只允許放表達(dá)式。 ?也許是你編譯器默認(rèn)執(zhí)行老標(biāo)準(zhǔn)。
另外,C99標(biāo)準(zhǔn)中for語(yǔ)句小括號(hào)中的這三個(gè)部分都算在單獨(dú)的作用域中,所以你可以在第一個(gè)部分那里定義和前面代碼中同名的變量。 但請(qǐng)注意:這個(gè)作用域不同于for語(yǔ)句大括號(hào)括起的循環(huán)體! 循環(huán)體作用域算是嵌套在這個(gè)作用域之中的,這一點(diǎn)在重復(fù)定義同名對(duì)象時(shí)會(huì)看出區(qū)別。
為什么改為.cpp就可以了? ?那大概是編譯器會(huì)把代碼當(dāng)作是C++來編譯。 C和C++是兩門不同的語(yǔ)言,不要因?yàn)樗鼈冮L(zhǎng)得像就覺得是一回事,事實(shí)上C和C++在語(yǔ)法上是有很多區(qū)別的:
C++標(biāo)準(zhǔn)中,for語(yǔ)句小括號(hào)中的第一個(gè)部分既可以是表達(dá)式也可以是聲明(就像C99標(biāo)準(zhǔn)),所以把代碼當(dāng)作C++就不會(huì)報(bào)這個(gè)錯(cuò)誤了。
但另一方面,C++中for語(yǔ)句循環(huán)控制的這三個(gè)部分和循環(huán)體都算在整個(gè)for作用域之中! 這點(diǎn)和C標(biāo)準(zhǔn)并不一樣,你的C代碼有可能會(huì)遇到由此引起的其他問題...
- 3 回答
- 1 關(guān)注
- 1402 瀏覽
添加回答
舉報(bào)