摘要:
背景: 在我们开发C/C++项目中,经常会使用到系统提供的可变参数函数,例如printf,scanf等。根据需求我们也可能使用到可变参数函数,虽然真正使用的机会不是很多,但是我还是比较好奇如何去实现可变参数函数。这篇博文主要是我记录学习可变参数的一个demo,具体功能是模仿scanf,目前只实现简单的功能,对可变参数函数的一种简单理解。其中使用到这篇博文使用宏实现日志信息以及异常处理。除此之外,我还搜索了几遍博文感觉讲的不错,大家也可以仔细读一读。Demo: 1 /** WARNING: this code is fresh and potentially isn't correct 阅读全文
摘要:
背景: 在程序开发中难免会遇到一些错误,像java,C++中本身提供了一些捕获异常的机制,而C语言中并没有提供,这样C语言程序猿就要比较繁琐的处理这些问题。最近发现使用宏处理在C中的和日志记录和异常处理这样的公用模块,在每个C项目中都可以使用,感觉很方便,今天整理记录下。 我之前处理可能出现错误的方式: 1.调用一个函数; 2.如果返回一个错误,例如打开文件失败; 3.释放相关的资源; 4.打印错误的日志信息。 这样的处理意味着在调用每一个可能出现错误的函数后,我都要做相应的处理,相对比较繁琐。解决方案: 使用宏定义来解决使用宏实现日志信息以及异常处理的问题,直接拿demo说话... 阅读全文
摘要:
我理解的函数指针: 函数指针是一种指向一块代码区域的指针。就像struct,int char等对应的指针类型,只不过函数指针是指向一个函数。函数指针可以用来做为回调使用,也可以用来在C语言中模拟面向对象编程。函数指针的格式一般如下: int(*POINTER_NAME)(...)函数指针的demo: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <errno.h> 4 #include <string.h> 5 6 void die(const char *message) 7 { 8 阅读全文
摘要:
背景: 这片文章主要是记录以前的误区,以前C/C++这块还是大学中学习的一点知识,好久不用,基本都忘记啦。一直误以为数组的大小和指针的大小一样,最近通过学习learn c the hard way发现并不是这样。这个其实没有太多可说的,直接上demo。demo代码: 1 #include <stdio.h> 2 3 int main(int argc, char *argv[]) 4 { 5 int areas[] = {10, 12, 13, 14, 20}; 6 char name[] = "Zhaosc"; 7 char full_name[] = { 8 阅读全文
摘要:
valgrind简单的介绍: valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。使用这个工具运行我们的程序,可以提示我们程序中我们没有注意到的严重错误,这个工具是一个开源的软件。安装valgrind:打开http://valgrind.org/downloads/,选择最近版本,下载。解压tar -xjvf valgrind-3.8.1.tar.bz2cd valgrind-3.8.1./configuremakesudo make install如何使用valgrind: 我这里通过一个简单的demo使用valgrind,查看demo中的具体问题.demo源码: . 阅读全文