美文网首页
C杂项_190117

C杂项_190117

作者: ppzbreeze | 来源:发表于2019-02-19 09:49 被阅读0次

分层

要具有一定的分层意识!!!函数用起来千万不要瞎调用,而且不同的硬件之间的连接关系一定要明确


memcpy处理int类型

拷贝普通的char类型是没问题的,但是int型就需要仔细考虑一下了,一个占4位而不是1位;


scanf使用

需要加取地址符!!!


轻度算法问题

遇到算法问题,一定要思路清晰,先分解问题,单独构造需要的每一个函数,最后再统一调度


宏定义加U

#define mark01    1u

上述的1u即表示无符号的1,u为unsigned的意思,这种语法应该是用于宏定义和运算中居多,定义赋值时通常不用


struct和typedef

struct STUA{
    int st1;
} STA;
//STUA为结构体类型名--星体,STA为具体结构体名--地球
typedef struct STUB{
    int st2;
} STB;

void main()
{
    
    struct STUA sup1;
    struct STUB sup2;
    STA supa1;//会报错,此种方法不可用
    STB supb2;//可正常使用
    STA.st1 = 1;//可正常使用
    STB.st2 = 2;//会报错
    //res = get_area(0,0,1,1,-1,-1,3,3);
    printf("%d %d\n ",STA.st1,sup1.st1);
}

typedef的struct在用的时候会有一定的省略,用法也稍有不同
加了typedef的struct STB具有了类似结构体类型名称的属性,可以直接用STB supb2的方法来定义,但是不具有了具体结构体名的属性,不能够使用STB.st2直接赋值


ifdef三连

#ifndef  TRUE
#define  TRUE     1
#endif

函数用作参数

初步总结
1.只要用函数作指针,或要使用函数作参数,均需要定义一个指针函数,返回值类型和参数要和实体函数完全相同,用来在具体使用中(实际主函数调用或结构体定义)替代实体函数,通常描述为typedef void (*pfunc)(int a,XXX)
实例如下图
.h

typedef void (*rec_u)(uint8_t *msg, uint16_t len);//描述函数参数类型

.c

static void UDP_Receive(uint8_t *msg, uint16_t len)//函数实体
{
  XXXXX
}
uint32_t CreateSocket(const char *ip, uint16_t port,rec_u readcb)//调用函数中的函数参数类型描述
{
  XXXXX
}
void main()
{
  ret = CreateSocket("3.0.4.3", 83, UDP_Receive);//主函数调用
}

!!!如果直接用函数UDP_Receive()做参数如下图

CreateSocket("3.0.4.3", 83, UDP_Receive())

则是用返回值做参数哦,含义大不一样


函数用作结构体内容的应用描述

.h文件
描述结构体,定义函数一律用指针类型

typedef void (*rec_r)(T_Mode mode, uint32_t msgId, TUri uri, uint8_t *msg);//指针
typedef void (*rec_u)(uint8_t *msg, uint16_t len);
typedef struct st1
{
  uint8_t used;           
  uint8_t socketId;       
  uint8_t refId;          
  uint32_t lifetime;
  char udp_ip[16];        
  uint16_t udp_port;      
  StRes res[SIZE];  
  uint8_t res_cnt;                      
  rec1 res_cb;            
  rec2 udp_cb; 
} StNBIoTInstance;

.c文件
实际函数的参数要保证和结构体中的函数体一致,在映射的时候不用带参数(直接用函数名称赋值)

void func1(T_Mode mode, uint32_t msgId, TUri uri, uint8_t *msg)//定义两种函数作参数形式
{
  XXXX
}
void func2(uint8_t *msg, uint16_t len)
{
  XXXX
}
void main()//主函数调用
{
  st1 st;
  st.res_r = func1;
  st.res_u = func2;
}

相关文章

  • C杂项_190117

    分层 要具有一定的分层意识!!!函数用起来千万不要瞎调用,而且不同的硬件之间的连接关系一定要明确 memcpy处理...

  • 丰富杂项设备驱动的read和write

    引言 通过丰富杂项设备驱动的write和read方法来丰富杂项设备驱动。 char_misc_device.c c...

  • [Bugs]

    [杂项][BUG]python 中debug出现ImportError: cannot import name c...

  • C语言

    C数据类型 C中的变量声明 C中的左值(Lvalues)和右值(Rvlues) C常量 定义常量 C存储类 杂项运...

  • springmvc+spring+jdbc整合

    简单实例 实例2 杂项1 杂项2 杂项3 实例4

  • 6.C语言杂项

    多级指针 函数指针 结构体 联合体 枚举类型 typedef:给类型起一个别名

  • C++学习(一、杂项)

    对象指针: Student 为一个类 Student stu; Student *pStu=&stu; pStu ...

  • 给你190117

    回乡 离回家的日子就剩三天了,从上周开始,日子就过的很慢很慢,好像是突然就慢了,一整个冬天就这样过去了。一回家就离...

  • C#窗体

    C#设置窗体属性 属性可以分为: 布局 窗口样式 行为 焦点 可访问性 设计 数据 外观 杂项 布局 窗口样式 行...

  • Shell脚本之杂项

    title: Shell脚本之杂项tags: shell编程, 杂项 记录一些学到的shell脚本里面的一些杂项(...

网友评论

      本文标题:C杂项_190117

      本文链接:https://www.haomeiwen.com/subject/gonbdqtx.html