当前位置: 首页 > news >正文

UIP中的psock_generator_send()的宏分析

在一些开发软件中,经常会遇到宏定义。为理解程序设置障碍。比如UIP中的代码就有很多宏定义,让人难以理解。本次只是抛砖引玉,便于以后遇到了,怎么分析。

1、PT_THREAD定义

#define PT_THREAD(name_args) char name_args

下面是要分析的函数,源代码如下:

PT_THREAD(psock_generator_send(register struct psock *s,unsigned short (*generate)(void *), void *arg))
{
PT_BEGIN(&s->psockpt);
if(generate == NULL) {
PT_EXIT(&s->psockpt);
}
s->sendlen = generate(arg);
s->sendptr = uip_appdata;

  s->state = STATE_NONE;  
do {
if(uip_rexmit()) {
generate(arg);
}
PT_WAIT_UNTIL(&s->psockpt, data_acked(s) & send_data(s));
} while(s->sendlen > 0);

s->state = STATE_NONE;

PT_END(&s->psockpt);
}

其实这只是执行了一次替换:

char psock_generator_send(register struct psock *s,unsigned short (*generate)(void *), void *arg)

2、PT_BEGIN宏定义

#define LC_RESUME(s) switch(s) { case 0:

#define PT_BEGIN(pt) {  LC_RESUME((pt)->lc)

上面两句就是:

{  switch(s) { case 0:

3、PT_END宏定义;

#define LC_END(s)     }

#define LC_INIT(s)     s = 0;

#define PT_INIT(pt)   LC_INIT((pt)->lc)

#define PT_END(pt) LC_END((pt)->lc);  PT_INIT(pt); return PT_ENDED; }

上面4句就是:

}s->psockpt.lc = 0;return PT_ENDED;}

上面的内容,看似基础,但是不简单。

http://www.dtcms.com/a/424237.html

相关文章:

  • pragma alloc_text的用途及支持的段列表
  • python做直播网站wordpress建站Pdf
  • 潍坊做网站好看电影网站模板下载
  • 织梦做的网站打开空白免费cms建站
  • Gradle 基础
  • 深入 GeoServer 样式世界:SLD(Styled Layer Descriptor)全解析
  • 番禺大石做网站广东网站设计费用
  • 为什么Redis的操作是原子性的,怎么保证原子性的
  • springboot中使用undertow容器
  • 设计模式(C++)详解——备忘录模式(1)
  • 网站内容建设要求age06网站分析流程
  • 怎么在网站上做seo网站源码配置数据库在拿
  • 公司网站案例展示厦门手机网站建设公司
  • 数据要素在医疗领域区域医疗协同的应用现状及未来趋势研究
  • 【JavaSE五天速通|第五篇】高级篇
  • 【每天一个知识点】超图和异构图的不同
  • 网站部兼容是什么原因常用博客建站程序
  • 大模型相关核心信息整合汇总
  • 【term】票据质押和背书的区别
  • 第四部分:VTK常用类详解(第118章 vtkWarpScalar标量变形类)
  • HTB 赛季9靶场 - Imagery
  • 集团微网站建设中企动力初期做的网站
  • 中山网站seo办公资源网
  • 检索增强生成(RAG)全流程解析
  • JAVA:Spring Boot 集成 AspectJ 实现切面编程
  • Promse.all 与 Promise.allSettled
  • 网站本科腾讯企点
  • 杭州高端品牌网站建设网站建设维护升级
  • 上海大规模网站建设平台北京城市副中心投资建设公司网站
  • 360免费建站空间网站建设网络安全