您的位置:首页 > 编程语言

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

2012-11-01 21:02 387 查看
兴哥教你学高质量编程
在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()函数分配的空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: