一:学习书籍
新手入门C语言入门级推荐书籍:大学教科书:谭浩强版本的《C语言》。理由,这本书在大神眼里写的挺垃圾的,该讲的点讲的不清楚,甚至还有许多漏洞。但是对于新手而言基础语法的概念还是讲的很详细的(特别是没任何编程基础的)。
C语言进阶书籍三件套:《C与指针》,《C陷进与缺陷》,《C专家编程》,这三本书的学习顺序按照逻辑的顺序进行,不然一上来就专家编程也不合适(或者您本来就是专家)。
二:技巧
在有程序的地方就一定存在或多或少的BUG。
对于新手入门而言,首先需要解决的是编译器帮我们找到的bug——语法错误,当然也存在一些(或者更多更加犯人的非语法错误——逻辑错误)。由于C语言在设计时本身就存在一些不合理的地方(对此,《C陷进与缺陷》有相关的描述),这些不合理的地方更加容易导致语法错误的出现。在编程时,语法错误是最容易的错误,即便一段代码给你几十几百个error,但是对于逻辑上的错误一般很难发现,除非代码运行时出现严重的BUG。所以一般的在C编程时,所以在编程时我们需要时刻注意
1.C允许局部变量与全局变量重名。在C语言调用规则中,当变量重名时(不同作用域条件下允许重名)。但是在实际操作时最好避免:任何两个变量重名,这样能够避免自己调用到自己不想用的参数,从而导致非预估的结果。
2.在if(判断语句){}else{}语句中,判断语句中如果存在某一个变量与常量等值的比较时,常亮放在前面;
例子:if(5 == i){i = 0;}; if (i == 5){i = 0;} 关于这两个判断语句好像没有什么差别,但是对于有时候手滑的状态将“==”变为“=”,就变得完全不一样了,对于5=i,编译器判断对于5这个常量进行赋值,不合法所以报一个error,当你编译报错时就直接定位语法错误了。但是当 i = 5 变成赋值语句就变得合法了,if(i)是真,不会报错,从而导致你的代码永远不会到else去。另外,如果你的i值有他用,这里的胡乱赋值会导致程序后续运行产生不想要的结果
3.还是if else语句,当判断某一个值在某一个范围内时,最好增大他的判断条件
例子:当一个数从零开始记录次数,记录到10次了就从新开始
if(某个条件){i++;}
if(10 == i){(i = 0);}
这样看好像没有什么问题,而且在实际情况下也不会有什么问题。对于类似于i的变量,我们一般叫做flag,标志位,通常而言一个flag可能会在程序的不止一个地方被修改,这时如果i被以外添加到了11,就不再触发。所以一般采用if (i>=10);
3.switch ...case...语句里面一定需要一个default;你们预想的情况都放在case里面
对于某一个参数只能有1, 2,3三种情况,那一定case 1: case 2:case 3:而不是case 1: case 2 : default:
4.正确利用tab键,所有的缩进应该利用tab键完成,所有的空格应该利用空格键完成。让代码排版规整,漂亮。并且保持统一的。这点可以多了解一下相关的编程规范的东西。一个漂亮的代码的作用,嗯,不用说
5.合理,正确的使用预编译指令。对于入门级选手而言,#ifndef, #define #endif这三个可能就比较熟悉了,这个是创建一个头文件必要的三个预编译指令。同时其他的预编译指令能够让代码开发更加容易。特别是利用宏去定义一些常用的信息。
#define LEDON gpioset(port,pin, 1)在代码中我使用LEDON更能表达我开灯的操作
#define DELAY 100 这里也能说明我100是我需要延时的时间,在这样需要经常修改的变量变为宏还有一个好处就是能够较少代码的修改量,比如我需要延时20了,就不要满篇的找(而且还有容易漏)
6.在实际应用中,一般我们需要的变量就需要他有很多中特性。enum, struct, union,利用这些关键字创建出来的变量更能代表该某些变量的特性,而不是定义一大堆的变量来代替。在稍微大一点的程序里,一般就是一大堆的这些变量在被各种操作,而不是那种零散的单个变量。
7.struct 会存在一个叫做内存对齐的问题,你会发现同一个struct变量,你sizeof出来的大小和别人的不一定相同。这个问题你可以在看《C与指针》时,它会教你
8.指针一定是C中最重要的东西。没有指针的C没有灵魂。因为大多数情况都是利用C开发底层硬件,当你和硬件打交道时需要了解的东西就是寄存器(某一个地址)。你如果需要直接操作某一块地址时,指针就是必须的东西。所以在任何情况下都要避免野指针。所以创建时初始化一下,void *p = NULL,当指针释放时,free(p),p = NULL;
9.选择一套你喜欢的代码规范很重要,从命名规则,到排版,到注释,语法使用,到工程创建等
10.作为一个底层程序员(要直接与硬件打交道的),一定要有一个软件不行怪硬件的心(调侃,同时也很重要),当然你如果拿到的是一块成熟的开发板(学习板除外)。因为Demo板开发不成熟,很可能存在焊点漏焊虚焊等情况,或者本身设计不足影响导致代码不能运行的状态。所以当你实在没法确定软件问题的时候,可以换一个demo板测试一下。
11.程序不需要女朋友,所以你们有女朋友的介绍给我吧,因为你们不需要那玩意儿(很重要)
12.以上观点仅仅是我个人的一点点小观点,如果你不同意,你可以反驳,我也虚心接受,但是我不会改。