/*************************************************
1. 头文件说明
  File name     : app_main.c
  Module        : 
  Author        : amir 
  Version       : 0.1   
  Created on    : 2022-02-11
  Description   : 代码语法规范

  Modify History:   
  1. Date:        Author:         Modification:
*************************************************/
#include <stdint.h>
#include "hlog.h"

/*[0]超过512字节的内存考虑要用堆内存, 特别是1K及以上禁止用栈内存*/
/*2. 注释标准：头文件宏标准*/
#ifndef __MAIN_H__ /* 3.  双下线__ */
#define __MAIN_H__

#endif

#define MAX(a, b) ((a) > (b) ? (a) : (b)) /* 4. 变量用括号() */  /* 注释用 *号进行，避免用 // */
#define MIN(a, b) ({int32_t ret; ret = (a) > (b) ? (b) : (a); ret+2;}) /* 5. 定义变量得到其值，GNU支持({}), 其它代替do{}while(0) */
#define MAX_PATH (256) /* 6. 宏用大写*/

typedef enum {
    STD_OK,
    STD_NG,
}std_e; /* 7. 结构体 _e */

typedef struct {
    uint8_t num;  /* 8. num of pipeline -- 变量简明注释，特别是重要的变量 */
    std_e   e_std;
}std_s; /* 9. 结构体 _s */


static int32_t  s_num;  /* 10. 静态变量用 s_xxx */

static int32_t  g_num;  /* 11. 全局变量用 g_xxx,      尽量少用公共变量 ，全局变量减少耦合 */

static int32_t  k_num;  /* 12. 常量用 k_xxx */

static int32_t *p_num;  /* 13. 指针变量用 p_xxx  */

#define OK 0 /* 14. success */
#define NG 1 /* fail */


int32_t standard(void) { /* 15. 函数 花括号*/
    hloge("<< %s %d", __func__, MIN(1,5));
    return OK; /* 16. TAB键为4个空格 */
}
            /* 17.  <---- 函数间用空格分段 */
int32_t standard2(std_s *p_std) {/* 18. 1. 对于结构体入参尽可能用指针，2. 指针变量用 p_xxx, 3. 指针符号*靠近变量 */
    int32_t  k      = 1; /* 19. 不允许将多个短句放一行 */
    uint32_t i      = 0; /* 20. =号对齐 */
    char     *p_str = NULL;  0; /* 21. 变量或指针要尽量初始化，除非明确操作 */
    {
        uint8_t cnt = 0; /* 22. 变量靠近第一次使用处 */
        cnt = cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt+cnt
            +cnt; /* 23. 操作符放在新行首 */
    }

    switch ( i ) { /* 24. switch/while/if/for/do 独占一行，需要加花括号, 加空格，突出关键字 */
        case 1:
            break;
        case 2:
            break;
        default:
            break;
    }

    i  = i + 1; /* 25. 操作符前面加空格 */
    i += 1;     /* 26. 选号对齐 */

    if ( i > k ) {/* 27. i不能小于k --  while/if/for 写注释，有助于维护人员 */
        k = ( i + k ) / 10; /* 28. 用括号表明操作顺序 */
    }

    #ifdef MAX_PATH
    { /* 29. 宏花括号 */
       hlogi("<< %s MAX_PATH:%d", __func__, MAX_PATH);
    }
    #endif
    return OK; /* 30. 用宏或有意义的变量表达， 禁止使用magic num */
}

