养成C编程良好习惯(不断更新.......)

兴哥教你学高质量编程

在C语言编程中,要养成良好的编程习惯。在这里举出多个例子,在这些例子中,有写是可以运行的,但我们还是应该尽力避免这些。不断更新中。。。争取每星期抽点时间写几个

例一、不要反回局部变量地址

#include <stdio.h>

int *test(void)

{

      int i=10;

      return &i;  

}

int  main()

{

        int *p;

        p=test();

        printf("*p=%d",p);

        return 0;

}

讲解:此函数可以有正常运行,但是我们还是要避免这种返回局部变量的地址的错误。很简单,子函数返回后,i不在存在,一旦原来的i地址的

内存被重新分配,那p所指向空间的内容就不在是我们原来所需要的了。

 

例二、避免局部变量分配空间过大。

void subfunction()

{

          int aaa[60][250][1000];

}

说明:上面的情况显然不可取,aaa的大小在60M这个样子,局部变量是分配在栈中间的,尤其在单片机,嵌入式等的微内存处理器编程中,必须避免这种情况。编译时候估计就直接报错了,呵呵

 

例三、申请堆空间后要释放。

void subfunction()

{

     char *p;

     char  *q;

     p=malloc(120);

     q=malloc(22); 

     rerurn p;        

}

说明:在堆空间中申请的内存空间,在使用完后要及时的释放,虽然程序运行完以后,会有系统进行释放,但我们绝对不建议这么做,这将造成内存空间的浪费,与内存使用的不连续情况的出现,导致程序运行的效率低下。

 

例四、申请堆空间后要释放。

我们在TurboC2.0中编译:
#include "stdio.h"
fun()
{
return1;
}
main()
{
printf(/"%d/",fun(2));
getchar();
}
编译正确且输出1,这说明,在C语言中,可以给无参数的函数传送任意类型的参数。但是看看c++的情况

C++语言中声明一个这样的函数:
intfunction(void)
{
return1;
}
则进行下面的调用是不合法的:
function(2);
因为在C++中,函数参数为void的意思是这个函数不接受任何参数。
但是在C++编译器中编译同样的代码则会出错。在C++中,不能向无参数的函数传送任何参数,出错提示“’fun’:functiondoesnottake1parameters”

说明:无论C还是C++中,若函数不接受任何参数,一定要指明参数为void。防止上面turbor中那个例子出现的情况。


 

例五、recalloc()函数使用注意点。

原型:extern void *realloc(void *__ptr,size_t __size);

ptr=realloc(ptr,new_amount);

说明:注意避免上面出现的情况,recalloc()函数申请失败时候将返回NULL,但是原来的ptr指向的内存空间还是可以使用的,上面的情况将会使原来的内存丢失,一直存于堆中,道道程序运行结束。注:ptr是原malloc()函数分配的空间。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值