
C/C++
文章平均质量分 62
学习与工作过程遇相关的C/C++的总结与分享
喜欢踢足球的老罗
0)不忘初心, 方得始终;
1)知其然,知其所以然;
2)工欲善其事,必先利其器
3)路曼曼其修远兮,吾将上下而求索;
展开
-
Clang dump AST需要注意的事项
Clang dump AST本质上是对一个OC/C/C++源文件编译单元执行编译,即跟编译相关的配置都是要注意配置好相关的参数,比如依赖的头文件的路径,特别编译的源文件依赖的其它路径下的头文件,还有就是C++新特性语法的支持等。如下是网上容易搜索到的Clang dump AST的使用示例如上默认的参数能正常工作的前提是处理的源文件比较简单,没用特殊的头文件以及新的C++语法特性等。原创 2023-03-20 12:20:40 · 1008 阅读 · 1 评论 -
2023年clang12编译问题与解决的记录
最近编译clang12以及尝试基于clang开发一个C++的静态代码分析工具,如下是遇到的环境相关的编译问题与解决方案。在些做个记录,同时供可能会遇到同样问题的同学参考。原创 2023-03-08 12:17:44 · 1036 阅读 · 0 评论 -
【cocos源码学习】cocos2d-x-4.0 Android Demo工程构建产物的简析
如标题所示,内容很少,但是可以从中了解相关的技术点,还有一些代码、脚本分析的技巧吧原创 2022-12-14 19:36:20 · 757 阅读 · 0 评论 -
openssl/rc4.h: 没有那个文件或目录
openssl库头文件找不到的解决方案原创 2022-11-03 12:56:33 · 1291 阅读 · 0 评论 -
【基础知识系列】用示例一窥字节序-大小端
示例代码分别在mac与android的开发环境下测试主机的字节序,还有通过IDE分析一个Int整型在内存的实际存储,于"肉眼可视"的方式去观察数据在内存的存储情况,加深与理解字节大小端。代码示例了两种方式判断主机字节序是否为小端字节序原创 2022-10-31 18:54:03 · 603 阅读 · 0 评论 -
【用示例学习与理解C++系列】timerfd与epoll的使用
Android开发环境下的timerfd示例原创 2022-10-21 15:01:51 · 1343 阅读 · 0 评论 -
【用示例学习与理解C++系列】eventfd与epoll的使用
Android开发环境下用一个简单的示例来学习eventfd结合epoll的使用,对理解Android hander的实现机制有帮忙原创 2022-10-17 12:19:51 · 2109 阅读 · 0 评论 -
【用示例学习与理解C++系列】pipe与epoll的使用
一个写线程每隔3秒住管道写一个字符,另一个读线程通道监听epoll事件,从管道读一个字符。管道的读取端注删事读事件到epoll实例中,当写线程住管道写数据后,读线程可以在事件拉取的循环周期中epoll_wait到可读事件,然后从管道中读出数据原创 2022-10-10 10:12:50 · 1651 阅读 · 0 评论 -
【用示例学习与理解C++系列】std::thread的使用与注意点
创建线程实例时通过构造方法可以设置该线程可执行方法,这个方法我们一般称之为线程入口函数,这个入口函数可以是具体的函数或lambda表达式原创 2022-08-03 18:21:36 · 601 阅读 · 0 评论 -
【注意/切记】 Android JIN开发过程中不要把long当jlong使用
C/C++ 调Java方法时直接把long类型的变量,传给CallStaticVoidMethod导致对应的Java静态方法接收到了错误的long值PS: 实际的业务场比较复杂,浪费了好多时间去分析才定位到是这个基础的,但容易忽略的问题!!!armv7架构下long是32位,jlong是64位,所以JVM去读取就读到了函数栈中其它的内存空间的值!得到了一个异常的值,并赋给了java代码中的long变量。目前大家的手机都是armv8的,所以开发调试的时候一般都是构建了armv8的包,导致没有第一时间发现异常原创 2022-07-08 19:03:28 · 1836 阅读 · 3 评论 -
处理JNI DETECTED ERROR IN APPLICATION: GetStringUTFChars received NULL jstring的崩溃 case 要注意实际的调用栈
GetStringUTFChars received NULL 的问题分析要注意实际的崩溃堆栈原创 2022-04-20 18:57:01 · 4419 阅读 · 0 评论 -
跨平层C++开发之C/C++创建的线程回调到OC代码时记得加@autoreleasepool
跨平层C++开发之C/C++创建的线程回调到OC代码时记得加@autoreleasepool原创 2022-03-01 19:03:12 · 2163 阅读 · 0 评论 -
跨平层开发之C++通过引用访问容器元素时需要注意...
如题,最近又填了一坑(处理了隐藏的崩溃问题),原因是通过引用访问容器元素时,把元素从容器移除后,还继续通过之前的引用变量来访问对象!(这时引用的对象的内存空间已经是非法的了!)原创 2021-09-18 20:01:48 · 254 阅读 · 0 评论 -
Android native开发需要注意native线程的Detach
在跨平台开发的过程中,通常跨平层/C++会创建native线程,如果创建的native线程运行的代码有调用到Java层接口(跟java层有交互),即有调到了AttachCurrentThread,当native线程退出时需要调DetachCurrentThread接口跟JVM世界做分离。否侧为遇到JNI经典崩溃问题之—**Native thread exited without calling DetachCurrentThread**,如果Deatch的处理逻辑写的不好,可能还会继续遇到JNI经崩溃崩溃问原创 2021-08-13 18:04:27 · 1857 阅读 · 0 评论 -
遇到了http响应头中的Server字段为空的“灵异事件“
前言祖传代码坑多是众所周知的事!这不,前段时间就遇到了一个坑,即手撸的httpclient模块遇到响应报名,响应头中的字段值为空时就出现“解析”报名异常,导致没有响应的回调到上层业务!这个httpclient是用c++来写的,用tcp创建连接后发http请求与处理http server的响应。出现该异常时收到的响应报名中Server的值竟然是空值!跟服务器维护同学排查不是自己的web server配置问题后,基本只能是怀疑用户网络连路的某个网关或网络代理搞的鬼—偷偷的追加了Server但该值为空。响应头原创 2021-08-10 13:17:36 · 1652 阅读 · 0 评论 -
C语言的多态示例之—利用函数指针来实现多例(typedef定义函数指针)
通过一个函数指针的标例看C语言的多态原创 2021-07-12 12:59:04 · 288 阅读 · 0 评论 -
跨平层开发之C++全局对象的析构导致的崩溃(IOS平台)
如题是前段时间遇到并处理的BUG,最终的解决方案是抄这位老哥的《[深入解构iOS系统下的全局对象和初始化函数](https://cloud.tencent.com/developer/article/1192687)》中提到的方案—利用atexit机制注册资源回收,以及处理其它单例对象全局对象的依赖,特别是要处理工作线程的退出等等。参考资料也收集了几篇跟本主题相关的,建议大家也看看。原创 2021-07-09 20:11:32 · 638 阅读 · 3 评论 -
Android native开发需要注意[-Wreturn-type],否侧会遇到运行时崩溃
最近在修改一个demo工程的代码时,为了快速去验证几个功能,屏蔽了某个C++类几个方法(声名有返回值的方法)的内容,包括最后return语句。结果是编译正常,但运行时崩溃(不稳定崩溃),具体的原因是没有返回值的函数,返回值是随机的,大概率会遇到空指针与野指针!注:demo项目的编译选项没有添加编译警告!原创 2021-07-07 19:46:44 · 741 阅读 · 2 评论 -
【用示例学习与理解C++系列】类的构造方法
用示例去学习与理解C++的类的构造方法原创 2021-07-02 12:48:41 · 1600 阅读 · 0 评论 -
terminating with uncaught exception of type std::length_error: basic_string
terminating with uncaught exception of type std::length_error: basic_string的崩溃原因,以及解决方案原创 2021-06-29 20:08:45 · 2887 阅读 · 0 评论 -
通过一个示例看全局对象的构造和析构以及atexit的使用
通过一个macOS的可执行程序的示例去观察全局变量/对象的构造、析构的顺序,还有atexit的使用等等原创 2021-06-27 17:15:44 · 457 阅读 · 0 评论 -
正确使用NDEBUG宏——release包如何关闭assert(Android/ios)
前言最近堆的坑——release包含了Assert的逻辑。原来是项目中针对发布包没有关闭Assert功能,即没有定义NDEBUG宏所导致。如下是搜索资料的与相关实践总结,供遇到同类问题的同学参考Android NDEBUG配置在build.gradle文件IOS NDEBUG配置在TAGGETS的build Settings的Preprocessing配置NDBUG跟assertassert用于调试应用,一般是在开发阶段使用。assert为true会抛出运行时异常而中止应用的运行。而NDB原创 2021-06-24 19:23:29 · 2245 阅读 · 0 评论 -
Android native开发设置线程名需要注意的地方
前言最近在native开发过程为了分析SDK使用线程情况,设置线程名过程中遇到了两个“坑”,故做下简单的总结记录同时跟大家分享一下。注:这里的native线程,是指用使用pthread创建的线程或直接使用c++的std::thread类来创建新的线程,Andorid/linux上使用prctl(PR_SET_NAME, thread_name, 0, 0, 0)来设置线程名总结第一点:设置线程名可能会失效一般情况下我们native的线程是需要跟java层的模块交互的,由于native线程是没有JV原创 2021-06-22 21:16:10 · 1505 阅读 · 5 评论 -
有关指针常量与常量指针、指向常量的常量指针
如题,对于C/C++初学者来说指针是不好更理解与使用的吧,再加上常量修饰符就更晕菜了。其实对于不经常读这三个中文名词的话,有时候也是反应还过来的!如下所示,是对于常量与指针的快速记忆方法(来自hackingcppp pointers)从右到左扫(分析),const 跟着(修饰)谁就对谁起作用!(const的作用就是不可变),const修复指针,标示指针的值不可变,指针的值不可变意味着它只能指向某个变量,const修复类型,标示指针指向的变量的值不能变,需要注意这里的变量的值不可变仅仅是指不能通过指针进行原创 2021-04-02 15:22:09 · 201 阅读 · 0 评论 -
C++输出流重定向
开发环境操作系统IDEC++标志输出流cout标准输出流,cerr—标准错误输出流, clog标准日志输出流都是ostream流对象,在中定义都可以把信息重定向输出到文件,包括shell下的重定向和代码级别的重定向cout与clog流在内存有缓冲区,用来存放流的数据,当缓冲区写满或向cout流插入一个endl时会立刻输出流中所有数据,然后插件一个换行符cerr流是没缓冲区的,目前就输出的目标介质,主要是确保信息及时的输出,以帮助程序的异常分析SHELL的默认行为在sh原创 2021-04-08 15:52:22 · 2138 阅读 · 0 评论 -
candidate function not viable: expects an l-value for 1st argument
说明编译出错的信息是说方法的参数期望的是一个左值!一般像我这类不熟悉C++的又用经常切换多种编程语言的人是有可能遇到这个类基础的问题。还有我发现在复杂的函数定义然后在Android studio的开发环境下,出错的提示会有些不一样,但基本上会看出是左右值的问题这里的case就是扯到C++的引用参数和C++的左值与右值的知识点了,在网络搜索了下相关的学习资料并整理在文章最后,同大家一起分享与共同学习之示例代码C++的代码(IDE是CLion)#include <iostream>#原创 2021-04-22 15:24:48 · 5928 阅读 · 0 评论