1. 程式人生 > >從零開始Rtklib解讀篇-簡單的程式設計理論和演算法及結構分析(三)

從零開始Rtklib解讀篇-簡單的程式設計理論和演算法及結構分析(三)

1. argc和argv

argc和argv中的arg指的是"引數",首先是一個計算提供的引數到程式,第二個是對字串陣列的指標

argc: 整數,用來統計你執行程式時送給main函式的命令列引數的個數

* argv[ ]: 字串陣列,用來存放指向你的字串引數的指標陣列,每一個元素指向一個引數

argv[0] 指向程式執行的全路徑名

argv[1] 指向在DOS命令列中執行程式名後的第一個字串

argv[2] 指向執行程式名後的第二個字串

以此類推

2. 除錯的層級

    無     無除錯資訊

    /Zd    目標檔案或者可執行檔案中只包含全域性和匯出符號以及程式碼行資訊,不包含符號除錯資訊

    /Z7    目標檔案或者可執行檔案中包含行號和所有符號除錯資訊,包括變數名及型別,函式及原型等

    /Zi     建立一個程式庫(PDB),包括型別資訊和符號除錯資訊

    /Zl     除了前面/Zi的功能外,這個選項允許對程式碼進行除錯過程中的修改和繼續執行。這個選項同時使#pragma設定的優化功能無效

選擇Link頁,選中複選框"Generate Debug Info",這個選項將使聯結器把除錯資訊寫進可執行檔案和DLL

如果C/C++頁中設定了Program Database以上的選項,則Link incrementally可以選擇。選中這個選項,將使程式可以在上一次編譯的基礎上被編譯(即增量編譯),而不必每次都從頭開始編譯。

3. trace函式:使用方法和printf完全一致,他在output框中輸出除錯資訊,release跳過

trace在控制中的應用:

1)在read檔案的時候,首先通過trace給出read檔案的path。

2)在read失敗的時候,通過trace給出read失敗的提示再return。

4. 關於分級控制:比如這裡的pcv的read部分。

1)主函式首先有個trace,告訴大家讀了什麼檔案,以read pcv開頭。

2)主函式主要包括根據不同的檔案型別進行了子函式進入的分類。有個if else的判定,最終返回了stat。子函式包括了readantex和readngspcv。

3)子函式的trace因此包括了readantex和antex pcv open error。

4)不同的trace的開頭,可以看出問題的層級是不一樣的。

5. 除了trace,還有其他的除錯手段嗎?

ASSERT   它接收一個表示式,如果這個表示式為TRUE,則無動作,否則中斷當前程式執行。對於系統中出現這個巨集 導致的中斷,應該認為你的函式呼叫未能滿足系統的呼叫此函式的前提條件。例如,對於一個還沒有建立的視窗呼叫SetWindowText等。

VERIFY    和ASSERT功能類似,所不同的是,在Release版本中,ASSERT不計算輸入的表示式的值,而VERIFY計算表示式的值。

6. 關於命名。引用google命名規範。 

1)類首字母大寫不包括下劃線,比如class MyClass()

2)函式首字母小寫,後面的單詞大寫,中間不包括下劃線,比如int myFunction()

3)變數全小寫,中間用下劃線隔開

4)全域性變數前加g_

5)常量全大寫

6)類的成員變數用下劃線結尾,函式的區域性變數則不用下劃線結尾。

7)初始化陣列的時候度,指定賦值陣列的時候,記得在最後一個元素後加一個 “,”,為了維護長陣列。

8)(後略)

 

Reference:

1、http://blog.csdn.net/ndjk454164628/article/details/31061603除錯技巧

2、http://blog.csdn.net/voidccc/article/details/37599203命名規範

3、https://baike.baidu.com/item/argc%20argv/10826112?fr=aladdinargc&argv