从零开始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

你可能感兴趣的:(RTKlib解读)