c/c++开发
wuzhidefeng
这个作者很懒,什么都没留下…
展开
-
多线程下的GDB调试方法
在Linux系统下做程序开发,GDB基本上是绕不过去的一门技术。很多初学者觉得GDB调试比较难,会本能的排斥,转而使用逐级增加日志打印的方式来调试。这种方式比较容易,但是相对来说比较麻烦,需要修改本地代码、编译、部署,花费的时间比较长。如果打印的部分没有达到预期目标,还需要反复修改代码、编译、部署。所以学会GDB调试程序是你进阶的一大步。启动GDB调试启动GDB分为两种,一种是直接使用GDB启动调试程序,另外一种是程序已经启动了,现在我们需要使用GDB来调试它。第一种,假定程序名为test,直接gd原创 2021-07-27 14:47:47 · 851 阅读 · 0 评论 -
如何提高C++代码质量
一般来说,人员的技术水平和代码质量的高低息息相关,但是人员技术水平的提高不是一朝一夕能够完成的。那么除此之外,我们有什么方法能够短时间提高团队的代码质量呢。从我过往的经验来说,有两个东西时间投入成本不大,但是对代码质量提高非常有作用,他们就是严格的编译条件以及第三方的检测工具。严格的编译条件目前编译器非常智能,很多危险或者异常的语法都能够被编译器捕获到,所以我们一定要善用编译器的分析功能,让编译器对我们的代码进下严格的检查。由于我一般使用Linux系统,编译器就选择了GCC,编译工具使用CMake,原创 2021-07-22 11:45:24 · 377 阅读 · 0 评论 -
c/c++通过宏来控制打印
在做c/c++开发,经常需要打印一些内容以方便调试,但是又希望在开发之后不再打印这些调试信息。最麻烦的做法就是在开发时打印调试信息,在发布时再注释这些打印信息。或者也可以每句打印信息都添加一个ifdef的宏。那有没有什么相对简便一些的方法呢?1、c语言c语言一般用printf,方法如下://#define __DEBUG#ifdef __DEBUG#define DEBUG(f...原创 2018-08-10 16:46:19 · 2529 阅读 · 0 评论 -
char、unsigned char与字面值比较的相关问题
最近做一个项目,定义了一个char数组,里面存放别人发送过来的消息。定义的消息头是0xff0xff,所以我收到消息后就与0xff进行比较,结果却发现不相等。看了一些资料,发现还是自己对基础知识的掌握不到位。首先,我写了个测试程序,代码及运行结果如下:void test_num(){ char a = 0x01; char b = 0xfe; unsigned c...原创 2018-09-30 09:22:08 · 2243 阅读 · 0 评论 -
linux编译之头文件搜索路径
c/c++开发,一般开头都要include一堆头文件,那么在系统编译的时候,编译器是去哪儿寻找这些头文件?首先include有两种写法,一种是#include <xxxx>,另一种是#include "xxx"。这两种写法的区别是#include "xxx"会首先在当前目录下搜索头文件(不递归),如果找不到的话再去系统目录下寻找。而#include <xxxx>是直接去系统目录下寻找。下面具体来讲在系统目录下的搜索原则。搜索顺序是编译时指定的目录>环境变量指定的路径原创 2020-05-28 14:11:51 · 855 阅读 · 0 评论 -
C++11好用的特性
一、简介C++11基本上可以说是现在做C++开发的必备技能,但是C++11那么多新的特性很多时候我们并不了解,实际开发中也没有使用。本文旨在整理C++11中那些常用并且好用的新特性以供大家在日常开发中使用,至于这些新特性的具体用法一般不做过多陈述。二、新特性2.1容器常用的容器包括vector、map、list、set等,这个不多介绍了,如果这些你都没用使用,那C++11跟你基本也没什么关系了。2.2线程std::thread以及常用的互斥锁、条件变量等,例如std::mutex原创 2021-05-13 14:57:12 · 235 阅读 · 0 评论 -
动态库so的版本兼容问题
现在的程序开发中,基本上我们都会依赖一些系统的或者第三方的动态库。如果我们将我们的可执行程序拷贝到一台新的服务器上,如果新的服务器上没有对应的动态库,那显然我们的可执行程序是无法运行的。这一点是显而易见的。复杂的情况是新的服务器上有这些动态库,但是动态库的版本不一样,我们的程序是否还可以运行呢?可能大部分人的答案是不行。那正确答案应该是什么呢?首先说明一下动态库的命名,一般情况下动态的命名采用libxxx.so.a.b.c,其中a代表大版本号,b代表小版本号,c代表更小的版本号。大部分的说法是只要大原创 2020-09-09 18:16:17 · 1846 阅读 · 0 评论 -
linux编译运行之动态库搜索路径
之前的文章讲了遇到cannot find lxxx报错的解决方案,今天系统的说下动态库搜索路径机制。动态库搜索分为两个时期:编译期和运行期。一、编译期1、通过-L命令指定。比如-L ./指定在当前目录下搜索动态库文件2、在LIBRARY_PATH变量中指定3、系统固定搜索目录:/lib、/usr/lib二、运行期1、编译时通过-Wl,-rpath指定2、在LD_LIBRARY_PATH变量中指定3、在/etc/ld.so.conf或者/etc/ld.so.conf.d/x原创 2020-05-28 16:16:56 · 459 阅读 · 0 评论