C语言编程小知识二

1.宏函数的使用:
在这里只是简单介绍一下它最常用的用法。在编程过程中,宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。例如想要进行强制类型转换
#define TYPECAST(value) (char*)(value)
则以后想要将一个指针强制转换为char*类型,只需要通过调用TYPECAST( )函数就可以了。或者比如经常用到的比较两个数取其中的最大值

			#define MAX( a, b) ( (a) > (b) (a) : (b) 

2.段错误的问题:
对于工作中经常会遇到一些段错误的问题,往往是因为对指针的操作不当而引起的,以前上学的时候,对指针的使用频率并不是很高,传递参数的时候,甚至直接写一个多达七八个参数的函数,更多是出于功能实现性的考虑,但是入职以后,对指针的操作是非常频繁了,如果连指针的操作都不能理解,更不要说自己是个合格的嵌入式工程师了。迄今自己所遇到的段错误,以操作空指针出错次数最多。比如说

	       struct stu{
	           int a;
	           int b;
	       };
	        struct stu * pointer = NULL;
	        printf("%d",pointer->a);

这种很低级的错误,但是由于刚习惯使用指针,有很多东西没想清楚就开始敲代码。我也因为这犯过很多的错误。另外还有就是访问越界,在C语言中,指针可以说是它的特色吧,但是也是非常危险的,很多时候对数组进行赋值,比如int a[64];结果你去访问了第65个元素或者对第65个元素进行了任何操作,就有可能引发段错误的问题。
3.关于typedef的使用:
在编程中,为了方便记忆或者方便阅读代码,同时也方便后期的代码维护,比说自己所做的项目中,有上百个参数,这种参数的数据类型都是 char *类型,因此我采用

               typedef char* PAL_ID_TYPE; 

这样去定义参数的时候,都采用PAL_ID_TYPE来进行定义,后期如果更换了一种机制,不再使用char而采用int来进行参数传递,这个时候只需要将char更改为int就可以啦,不用再挨个的更改每个参数值的类型。
4.关于char*类型的赋值:
有时我们在项目中需要访问字符串,比如说现在有一个函数,这个函数需要通过对字符串的解析来获取某些参数,比如说“get.web_bitrate_param”这个字符串,用来获取网页上的波特率参数,我一开始采用的char bitrate[64];然后通过snprintf来将字符串拷贝过来,但是其实是可以直接用等号"="来赋值的,操作的方法就是

               char* bitrate;
               bitrate = "get.web_bitrate_param";

但是有些编译器会报错,所以为了不出错,更好的是在“get.web_bitrate_param”前面加char*来进行强制类型转换,这样更为稳妥一些。

猜你喜欢

转载自blog.csdn.net/yunmao2882/article/details/84895017
今日推荐