c学习笔记之static、const

(1)static 静态变量、静态函数。作用域只对本文件(xxx.c)有效,且静态函数声明不能出现在xxx.h头文件中

上实战代码:

/***********************************************************************
*                局部变量
***********************************************************************/
static D_TIMER_ID  gui_tick_timer_id = -1;


/***********************************************************************
*                局部函数原型
***********************************************************************/
static D_VOID gui_tick_timer_func(D_UINT32 id, D_VOID* argc);


/***********************************************************************
*                全局函数实现
***********************************************************************/
/******************************************************************
函数原型:ui_gui_timer_init

功能描述:GUI 定时器初始化函数

参数: 无
 
返回值: 
 D_SUCCESS: 成功
 D_FAILURE:   失败

注意:
******************************************************************/
int ui_gui_timer_init(D_VOID)
{
 D_INT32 ret;

 ret = DG_timer_create(DG_TIMER_REPEAT, gui_tick_timer_func, NULL, &gui_tick_timer_id);
 if(D_SUCCESS != ret)
 {
  return D_FAILURE;
 }

 DG_timer_set_interval(gui_tick_timer_id, GUI_TIMER_TICK);
 DG_timer_start(gui_tick_timer_id);

 return D_SUCCESS;
}


/***********************************************************************
*                局部函数实现
***********************************************************************/
static D_VOID gui_tick_timer_func(D_UINT32 id, D_VOID* argc)
{
 D_INT32 ret;

 ret = ui_gui_msg_send(WMUI_TICK, GUI_TIMER_TICK, 0, 0);
}

(2)const  形参变量修饰符、函数体内变量修饰符、函数返回值修饰符。 指定变量为常量不可更改。

void stack_push(Stack *stack, const void *data) {
 
 LinkedListNode *list_node = NULL;
 
 if (stack == NULL) {
        return;
    }
 
 list_node = linked_list_node_construct(data);
 
 linked_list_append_node(stack->list, list_node);
 
}

const void *stack_pop(Stack *stack) {

 LinkedListNode *list_node = NULL;
    const void *data = NULL;
 
 if (stack == NULL) {
        return NULL;
    }
 
 linked_list_seek_end(stack->list);
 
 list_node = linked_list_get_next_node(stack->list);
 
 if (list_node == NULL) {
        return NULL;
    }
  
 data = linked_list_node_get_data(list_node);
 
 linked_list_remove_node(stack->list, list_node);
 
 return data;

}

备注:

C语言的标准内存分配函数:malloccallocrealloc等。
malloccalloc的区别为1块与n块的区别:
malloc调用形式为(类型*)malloc(size):在内存的动态存储区中分配一块长度为“size”字节的连续区域,返回该区域的首地址。
calloc调用形式为(类型*)calloc(n,size):在内存的动态存储区中分配n块长度为“size”字节的连续区域, 每一位都初始化为零,返回首地址。
realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。

原文地址:https://www.cnblogs.com/fx2008/p/2205296.html