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

温州做网站建设公司建设网站为网站网站做广告

温州做网站建设公司,建设网站为网站网站做广告,微网站开发协议,网页制作与设计作业在哪搜题1 前言 printf调试是嵌入式调试的基本手段#xff0c;而且是非常重要的手段#xff0c;我认为相比单步调试更加有用有效#xff0c;特别是单片机之后跑系统#xff0c;单步调试效率更加低下了#xff0c;我们在工作遇到bug的时候#xff0c;我们第一时间就想知道那些该死…1 前言 printf调试是嵌入式调试的基本手段而且是非常重要的手段我认为相比单步调试更加有用有效特别是单片机之后跑系统单步调试效率更加低下了我们在工作遇到bug的时候我们第一时间就想知道那些该死的日志有没有保存下来这样好让我们程序员装逼一波把问题解决。 printf宏定义调试非常重要有些日志在开发的时候才需要打开发布的时候需要关闭但是在代码上又需要保留下次调试所以我们在调试的时候才打开调试宏定义而且printf会占用空间很多芯片的空间非常有限更应该关闭调试宏。 下面就直接进入正题说一下调试的技巧 2. 正文 1 编译器内置宏 先介绍几个编译器内置的宏定义这些宏定义不仅可以帮助我们完成跨平台的源码编写灵活使用也可以巧妙地帮我们输出非常有用的调试信息。 ANSI C标准中有几个标准预定义宏也是常用的 __LINE__在源代码中插入当前源代码行号 __FILE__在源文件中插入当前源文件名 __DATE__在源文件中插入当前的编译日期 __TIME__在源文件中插入当前编译时间 __STDC__当要求程序严格遵循ANSI C标准时该标识被赋值为1 __cplusplus当编写C程序时该标识符被定义。 编译器在进行源码编译的时候会自动将这些宏替换为相应内容。 2 最基本的用法 打开宏的时候输出 关闭宏的时候输出 3 换个高级的用法         代码如下 #include stdio.h#define __DEBUG__#ifdef __DEBUG__ #define DEBUG(format,...) printf(Date: __DATE__,File: __FILE__, Line: %05d: format\n, __LINE__, ##__VA_ARGS__) #else #define DEBUG(format,...) #endifint main(int argc, char **argv) {char str[]Hello World;DEBUG(%s,str);return 0; }输出如下 Date: Oct  5 2018,File: /code/main.c, Line: 00013: Hello World sandbox exited with status 0在线编译器网址https://tool.lu/coderunner/ 4 ## __VA_ARGS__ ... 宏和可变参数 在GNU C中宏可以接受可变数目的参数就象函数一样 例如:  #define pr_debug(fmt,arg...) \  printk(KERN_DEBUG fmt, ##arg)用可变参数宏(variadic macros)传递可变参数表  你可能很熟悉在函数中使用可变参数表如: void printf(const char* format, ...);直到最近可变参数表还是只能应用在真正的函数中不能使用在宏中。 C99编译器标准允许你可以定义可变参数宏(variadic macros)这样你就可以使用拥有可以变化的参数表的宏。可变参数宏就像下面这个样子: #define debug(...) printf(__VA_ARGS__)缺省号代表一个可以变化的参数表。使用保留名 __VA_ARGS__ 把参数传递给宏。当宏的调用展开时实际的参数就传递给 printf()了 例如:  debug(Y  %d\n, y);而处理器会把宏的调用替换成:  printf(Y  %d\n, y);因为debug()是一个可变参数宏你能在每一次调用中传递不同数目的参数:  debug(test);// 一个参数用GCC和C99的可变参数宏 更方便地打印调试信息 可变参数宏不被ANSI/ISO C 所正式支持。因此你应当检查你的编译器看它是否支持这项技术。  可变参数的宏里的##操作说明带有可变参数的宏(Macros with a Variable Number of Arguments)  更详细请查看如下链接 http://www.cnblogs.com/alexshi/archive/2012/03/09/2388453.html 5 举个栗子-Linux内核调试宏 下面是Android touchscreen驱动的调试宏用法看这样的写法就是一个大神了给大家借鉴。 // Log define #define GTP_ERROR(fmt,arg...)          printk(-GTP-ERROR- fmt\n,##arg) #if DEBUG_SWITCH #define GTP_INFO(fmt,arg...)           printk(-GTP-INFO- fmt\n,##arg) #define GTP_DEBUG(fmt,arg...)          do{\if(GTP_DEBUG_ON)\printk(-GTP-DEBUG- [%d]fmt\n,__LINE__, ##arg);\}while(0) #define GTP_DEBUG_ARRAY(array, num)    do{\s32 i;\u8* a  array;\if(GTP_DEBUG_ARRAY_ON)\{\printk(-GTP-DEBUG-ARRAY-\n);\for (i  0; i  (num); i)\{\printk(%02x   , (a)[i]);\if ((i  1 ) %10  0)\{\printk(\n);\}\}\printk(\n);\}\}while(0) #define GTP_DEBUG_FUNC()               do{\if(GTP_DEBUG_FUNC_ON)\printk(     -GTP-FUNC-       Func:%sLine:%d\n,__func__,__LINE__);\}while(0)#else #define GTP_INFO(fmt,arg...) #define GTP_DEBUG(fmt,arg...) #define GTP_DEBUG_ARRAY(array, num) #define GTP_DEBUG_FUNC() #endif 欢迎加我微信weiqifa0拉大家进微信技术讨论群 欢迎关注微信公众号-嵌入式Linux
http://www.sadfv.cn/news/283944/

相关文章:

  • 深圳哪里有做网站的公司erp管理系统的作用
  • 相应式网站wordpress主题配置
  • 公司网站的具体的建设方案推广教程
  • 自助建站 源码维护网站需要什么技术
  • 自己做网站卖产品怎么样wordpress翻译插件
  • 云梦建站绵阳门户网站建设
  • 网站个人备案容易过吗伊犁园xyz视频人入口
  • 韶关网站建设第一品牌wordpress 创建数据库
  • 网站开发的方法有哪些外贸营销推广公司
  • 深圳住房和建设局网站置换平台wordpress qq登录微信
  • 企业网站的意义深圳sem竞价托管
  • 小说网站开发背景wordpress music pro
  • 怎么做一个网站熊掌号WordPress推送
  • 工作室网站建设的意义wordpress安卓版教程
  • 社保网站上做减员一直不审核电子商务网站建设参考书
  • 彩票资讯网站建设无刷新wordpress主题
  • 网站制作多少页学校网站开发说明书文档
  • 甘肃网站建设公司电话重庆颐众达网站
  • 做产品推广什么网站会比较好酒业网站模板下载
  • 安徽省建设工程造价管理总站网站手机网站上线左右滑动
  • 厦门在线制作网站怎么配置网站服务器
  • 怎样学网站建设公司网站功能
  • 做娃衣的布料去哪个网站公司图标设计logo
  • 在线优化网站宝安网站建设公司968
  • 阜城网站建设wordpress删除重复文章的三种方法
  • 企业做网站要多少钱济南建筑公司
  • 个性化网站建设开发网站建设组织机构
  • 电商网站数据中心建设方案做网站怎么收集资料
  • 嘉兴模板建站定制网站网站域名备案证书
  • 做电力招聘的有哪些网站宠物网页设计图片