一:事情起因
事情的起因是這樣的:原來的產(chǎn)品已經(jīng)有比較成熟代碼,并且產(chǎn)品已經(jīng)批量??蛻籼岢隽诵碌墓δ芨膭?,需要將其中一個端口的功能與另一個端口互換,原來做AI采集的端口用作開關(guān)量采集,原來用作開關(guān)量采集的端口用作AI采集。
這么小的代碼改動,想著讓新來的小伙子嘗試一下,就放心地讓他去改。2天后詢問進度,本來以為已經(jīng)完成的工作,竟然被告知代碼測試還有問題。
抽出來時間跟他一起檢查了代碼。當我看到下面的改動之后,瞬間崩潰了。
原來的代碼是這樣的:
GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure);改動后的代碼是這樣的:
GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure);乍一看好像沒有什么問題,將原來PA9的AI模式配置注釋掉,修改為上拉輸入模式,將原來AI10的上拉輸入模式修改為AI模式。
當我將代碼用vscode打開后,發(fā)現(xiàn)第204行與205行的顏色相同。如下圖:
原來是不小心在第204行最后輸入了一個“”,這個“”在C語言中是換行標記,使用這個符號時,就導致第205行其實是被注釋掉的。相當于PA9的模式一直沒有設(shè)置成功。
當我問他為什么要在最后增加一個“”的時候,他說:“不知道,不過這個已經(jīng)被注釋了,也不影響啊!”。
我的內(nèi)心在想,“你是C語言之父啊,你說沒影響就沒影響了?”。不過作為導師,還是耐著性子給他講解了“”在C語言中的用法。
二:總結(jié)
在C語言程序編寫中,我們有時會遇到一行代碼太長而影響閱讀或者出現(xiàn)與部分公司或組織要求的編碼規(guī)范不符的情況,此時我們需要將這行代碼分成多行來寫。
針對一般語句,我們使用結(jié)尾作為換行標記。當在編譯時,后面的換行符將被忽略,當做一行處理。
所以上面的語句:
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;在編譯時的實際效果會這樣的:
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;所以下面一行配置端口為“上拉輸入”模式的代碼其實是被注釋掉,不被編譯進去的。
你也遇到過類似的問題嗎?
審核編輯:劉清
-
C語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136208 -
GPIO
+關(guān)注
關(guān)注
16文章
1196瀏覽量
51919 -
vscode
+關(guān)注
關(guān)注
1文章
154瀏覽量
7670
原文標題:讓新來的改一段C代碼,結(jié)果后差點氣死!
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論