一、問題描述
如圖:在點(diǎn)燈的過程中想寫一個for循環(huán)來實現(xiàn)隨機(jī)數(shù)點(diǎn)燈功能,但是如下圖第26行的代碼出現(xiàn)了問題“declaration may not appear after executable statement in block”,翻譯過來就是聲明不能出現(xiàn)在塊中的可執(zhí)行語句之后。其實int i是聲明語句,值得注意的是“GPIO_InitTypeDef GIIOPP”(此句的作用是定義了一個GPIO_InitTypeDef
類型的結(jié)構(gòu)體變量GIIOPP
)也是聲明語句。
二、解決方案一
將聲明語句放在int main()語句下方,對于上圖而言,可以把int i放在int main()的上方;或者將其放在GPIO_InitTypeDef GIIOPP的上方/下方。只需要將聲明語句放在可執(zhí)行語句之前。GPT的回答如下。
三、解決方案二
1、因為keil 默認(rèn)編譯標(biāo)準(zhǔn)是C89,將C89換成C99就行。此時聲明語句的位置不影響代碼執(zhí)行
2、如下圖:
3、C89和C99的區(qū)別
Keil是一款廣泛使用的嵌入式開發(fā)工具,它提供了多種編譯標(biāo)準(zhǔn)選項,包括C89和C99。
C89是指ANSI C(或稱為C90)標(biāo)準(zhǔn),在1989年發(fā)布。它是最早的C語言標(biāo)準(zhǔn)之一,定義了C語言的基本語法和特性。
C99是指C語言的第二個標(biāo)準(zhǔn),于1999年發(fā)布。相比于C89,C99引入了一些新特性和改進(jìn),以增強(qiáng)C語言的表達(dá)能力和功能,提供更方便的編程方式。
C89與C99的區(qū)別主要體現(xiàn)在以下幾個方面:
-
數(shù)據(jù)類型:C99引入了新的數(shù)據(jù)類型,例如
long long int
和bool
等。而C89只支持基本的數(shù)據(jù)類型。 -
預(yù)處理指令:C99增加了一些新的預(yù)處理指令,例如
_Pragma
和__func__
等,提供更靈活和強(qiáng)大的預(yù)處理功能。 -
變長數(shù)組:C99支持變長數(shù)組,可以動態(tài)指定數(shù)組的長度。而C89中數(shù)組的長度必須是常量。
-
注釋:C99支持在代碼中使用
//
進(jìn)行單行注釋,而C89中只支持/* */
多行注釋。 -
布爾類型:C99引入了
_Bool
類型,用于表示布爾值(true或false)。而C89中使用整型來表示布爾值。文章來源:http://www.zghlxwxcb.cn/news/detail-763920.html
需要注意的是,不同版本的編譯器可能對C89和C99的支持程度有所差異。因此,在選擇編譯標(biāo)準(zhǔn)時,需要根據(jù)實際情況和編譯器的支持情況來確定。文章來源地址http://www.zghlxwxcb.cn/news/detail-763920.html
到了這里,關(guān)于STM32問題_01:declaration may not appear after executable statement in block的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!