簡單迴圈的兩個小注意

2021-08-24 23:50:11 字數 744 閱讀 1235

今天寫程式過程中發現兩個很可能犯錯的地方,記一下。

乙個是index命名和注意index的型別。

程式寫了幾年之後基本是用在潛意識程式設計,有個大概框架,就很自然的寫出來了,而不是想一步寫一步,所以刻在潛意識裡的程式設計習慣的準確性和穩定性是極其重要的。

第二點就是大型專案,**量太大,乙個小問題,查n久。

最好用int而不是unsigned int 來做迴圈index型別。

之前一直喜歡用u32來做型別,比如

for(u32 i=0;i事實上寫程式寫多了之後,我們會用條件反射去寫程式而不經過大腦。

有時候為了效率會把vector從後向前pass然後刪除,條件反射會讓我寫出這個:

vectormodels; //.... u32 size = models.size(); for(u32 i = size-1;i>=0;i--)

於是出現越界情況,當size是0的時候,立刻i變成0xfffffff,於是就錯了,用unsigned int還是太容易遇到這種邊界條件,還是預設用int的比較合適。

i和j的問題,很多文章都說過了,i和j不好直接做for的index用的。

簡短**片段也遵循這個的話有點矯枉過正。

但是在邏輯稍微複雜點的迴圈裡,還是遵循用有語義的變數名,今天差點寫出來在用j做index的for迴圈裡使用models[i]這樣的程式。

這就恐怖了,這種bug非常難查,而且一般不會懷疑這裡,耗費個16小時一點都不奇怪。

所以還是複雜**裡,注意迴圈變數名為好。

兩個簡單的迴圈

1.create or replace procedure pro test 01 is begin for aa in select object name from test 01 loop insert into test 02 values aa.object name end loop e...

合併兩個非遞減有序的單迴圈鍊錶

合併兩個非遞減有序的單迴圈鍊錶 本題要求實現乙個合併函式,實現對有序單迴圈鍊錶tail1和tail2的合併,要求合併時實現去重操作,即合併後的鍊錶中沒有重複的元素,並且合併後的鍊錶為遞增有序鍊錶。函式介面定義 pnode mergendeduplicatelist pnode tail1,pnode...

c struct的兩個注意點

1.c 的結構體變數在宣告的時候可以省略struct,在c中這樣是不可以的,例子如下 1 include2 include 3using namespace std 45 struct test 910 int main void 11 2.c 的結構體宣告可以宣告在main 函式中,也可以在mai...