我的C/C++语言学习进阶之旅
文章平均质量分 80
我的C/C++语言学习进阶之旅
字节卷动
字节卷动 | CSDN博客专家
博客知识包括:Android、ASM、OpenGL、C++、Java、Python、Shell、Jenkins、Gitlab、Git、SVN等相关进阶知识。
展开
-
【我的C/C++语言学习进阶之旅】关于Vcpkg的参考资料:一个让你可以快速引用C++开源库的包管理工具Vcpkg,快来使用Vcpkg管理你的C++ 项目中的依赖项吧!
快速熟悉Vcpkg,快来使用Vcpkg管理你的C++ 项目中的依赖项吧!原创 2023-01-13 17:16:42 · 397 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】C++编程常出现错误:Undefined Reference的一些常见情况分析
这是导致“Undefined reference”错误的最简单原因。程序员只是忘记了定义对象。考虑以下 C++ 程序。这里我们只是指定了函数的原型,然后在主函数中使用它。# include // 声明函数 int func1();// 调用函数 func1();}编译出错,如下所示:因此,当我们编译这个程序时,会发出“undefined reference to `func1()'”的链接器错误。为了消除这个错误,我们通过提供函数 func1 的定义来更正程序如下。原创 2022-12-09 18:18:48 · 20909 阅读 · 3 评论 -
【我的C/C++语言学习进阶之旅】收集关于MODERN C++ 11/14/17/20/23 的一些资料
现代 C++ 教程 高速上手 C++ 11/14/17/20changkun/modern-cpp-tutorialCppCon视频教程C++11 cppreferenceC++14 cppreferenceC++17 cppreferenceC++20 cppreferenceC++23 cppreferenceWhat Every Programmer Should Know About MemoryEffective Modern C++(中文版)欢迎回到 C++ - 现代 C++原创 2022-12-05 21:07:50 · 1806 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
如果执行ninja命令的目录下并不存在文件,则运行ninjaninja: error: loading 'build.ninja': 系统找不到指定的文件。一定要在有文件的目录下执行ninja命令。原创 2022-10-11 10:58:08 · 3468 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】NDK开发运行的时候出现错误signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x940a2e48
信号(signal)机制它其实是进程间通信的一种方式。在处理ndk crash日志的时候可以大概理解为错误码,它描述了错误的大概原因。信号码值描述SIGILL4非法指令,例如损坏的可执行文件或代码区损坏SIGABRT6通过C函数abort()发送;为assert()使用SIGBUS7不存在的物理地址,更多为硬件或系统引起SIGFPE8浮点数运算错误,如除0操作SIGKILL9迅速完全终止进程;不能被捕获SIGSEGV11段地址错误,例如空指针、野指针、数组越界等。原创 2022-09-29 11:43:30 · 1508 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】JNI开发之转换C层返回的结构体为Java实体Bean
在我之前的博客介绍了如何传Java对象到C++层代码。今天和算法联调的时候,调用算法返回的结果是一个Struct结构体,然后我需要将将构体转换为Java对象Bean返回给Java业务层,因此记录一下怎么转换的。原创 2022-09-28 21:01:39 · 959 阅读 · 0 评论 -
【我的Android进阶之旅】如何传递android的log日志打印方法给到底层算法c代码去调用?
common.h定义了一个logd函数,用于日志打印* 日志打印函数* @param tag 日志TAG* @param fmt 格式化日志内容* @param ... 格式化日志里面需要替换掉的不定参数common.cpp将logd函数具体实现,最终调用里面的函数来打印日志,这样就可以在Logcat窗口查看到打印出来的日志* 简单打印日志的方法} }原创 2022-09-28 17:59:06 · 718 阅读 · 2 评论 -
【我的C/C++语言学习进阶之旅】什么是.pb.h 和 .pb.cc 文件?
是一种免费的开源跨平台数据格式,用于序列化结构化数据。它在开发程序以通过网络相互通信或存储数据时很有用。该方法涉及描述某些数据结构的接口描述语言和从该描述生成源代码以生成或解析表示结构化数据的字节流的程序。是Google的语言中立、平台中立、可扩展的结构化数据序列化机制——类似XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地将结构化数据写入和读取各种数据流,并使用各种语言。由文件.proto文本文件定义,我们可以轻松地阅读并理解。结论:其实.pb.h和。原创 2022-09-19 21:00:00 · 4678 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】使用stb_image库时候报错 multiple definition of ‘stbi_xxxxx‘ 和 previous definition here
解决 使用stb_image库时候报错 multiple definition of 'stbi_xxxxx' 和 previous definition here 的问题原创 2022-08-25 18:10:46 · 3501 阅读 · 3 评论 -
【我的C/C++语言学习进阶之旅】C/C++编程笔记:C语言使用宏定义#define来处理通用的可抽取的代码块
在项目开发过程中,有很多通用的代码,可以抽取出宏定义来简化代码。比如我最近在做一个滤镜的项目时候,很多基本的调色代码都类似,如下所示,就可以抽取通用的代码。1.2 使用#define定义关键是要在每一个换行的时候加上一个,用语句包含多语句防止错误 ,代码就只会执行一次。这样代码就可以抽取很通用的代码逻辑出去,精简代码。比如,我们的代码需要调用两个不同的方法,那么可以参考类似的代码1.4.1 调用三个方法1.5 其他实现C++还可以使用template来实现类似的效果,这里就不写了。原创 2022-08-23 21:00:00 · 724 阅读 · 2 评论 -
【我的C/C++语言学习进阶之旅】在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题
【我的C/C++语言学习进阶之旅】在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现"undefined reference to" 问题,如何排查和解决原创 2022-08-23 21:15:00 · 1098 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】C语言标识符的命名规则和分类
介绍C语言的标识符命名规则和分类原创 2022-08-06 19:30:00 · 1199 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】C++格式化字符串
介绍C++格式字符串的几种方式以及格式化数字补0的方法原创 2022-07-13 21:13:09 · 1331 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】NDK开发之解决错误:signal 5 (SIGTRAP), code 1 (TRAP_BRKPT), fault addr 0xXXX
怎么排查和解决NDK开发出现的错误: signal 5 (SIGTRAP) code 1 (TRAP_BRKPT)原创 2022-06-10 20:00:00 · 2497 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】介绍一下NDK开发之C的简单易用图像库stb
C++使用stb库来读写图片、改变图片尺寸原创 2022-06-01 16:33:14 · 2782 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】NDK开发之Native层使用fopen打开Android设备上的文件
一、fopen简介在C语言中,操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还可以记录当前读写到了哪个位置,下次可以在此基础上继续操作。标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的,可直接使用。1.1 fopen函数使用 <stdio.h> 头文件中的原创 2022-05-20 11:57:45 · 2639 阅读 · 1 评论 -
【转载】C++工程:一文看懂如何使用 C++ 开发 Android、iOS 项目
PS: 本文转载于:https://github.com/taoweiji/cpp-android-ios-example#readme为什么使用C++C/C++是相对底层的语言,相比OC、Swift、Kotlin、Java等都要难,但是C/C++是Android和iOS都支持的语言,我们使用C++主要有一下几种原因:跨平台,一套代码多端使用;安全性,Java是极其容易被反编译的语言,如果把核心的代码改成C++可以有效提高安全性,但是在iOS意义就不大了;高性能,在多数的场景下这个优势并不明.转载 2022-05-11 23:00:00 · 8401 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】 通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS/iOS/Android等
【我的C/C++语言学习进阶之旅】 通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS/iOS/Android等原创 2022-05-11 22:00:00 · 4294 阅读 · 1 评论 -
【转载】C++ 并发编程(从C++11到C++17)
C++ 并发编程(从C++11到C++17)转载 2022-03-30 15:11:56 · 494 阅读 · 1 评论 -
【我的Android进阶之旅】如何在NDK开发的时候定位Native层的内存泄漏?
最近做一个OpenGL ES项目,使用C++来实现的。在自测阶段,发现内存有泄漏,特别是Native内存泄漏的很明显。然后通过本文所说的方法来动态检测了Native的内存泄漏,最终全部修复完内存泄漏!!!原创 2022-03-18 10:29:10 · 3452 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】JNI开发之Java传递实体Bean到C++层,实体Bean包含int、float等基本类型和数组array、List集合等
一、需求描述最近有个需求,Java上层包装一系列的数据到一个实体bean,实体Bean包含int、float等基本类型和数组array、List集合等,然后通过JNI传递给C++层来进行数据处理,这边折腾了一番终于搞定,这里记录一下。1.1 Java实体bean首先,Java层实体bean代码如下:package com.oyp.ndkdemo;import android.graphics.PointF;import java.util.List;public class FaceFe原创 2022-02-25 10:34:20 · 1305 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】转载:实现一个在JNI中调用Java对象的工具类
实现一个在JNI中调用Java对象的工具类,从此一行代码就搞定!JNI调用Java函数的工具类转载 2022-02-24 12:02:14 · 458 阅读 · 0 评论 -
【我的Android进阶之旅】解决Android Studio 编译NDK项目出错:clang++: error: no such file or directory
一、错误描述在新建一个NDK项目的时候,出现编译错误,如下所示:0:49 C/C++ Configuration Problem vlog.basic-opengl | debug | x86 Compiler exited with error code 1: C:\Android\SDK\ndk\21.3.6528147\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe -xc++ --target=i686-none-lin原创 2022-01-19 12:02:13 · 5168 阅读 · 2 评论 -
【我的Android进阶之旅】Android Studio的NDK项目可以运行,但是C++代码全部报红的错误
一、错误描述最近重新编译一份网上下载的NDK项目的时候,出错了,如下所示:反正几乎每一个Cpp文件都是报红,如下所示:8:49 C/C++ Configuration Problem NDK_OpenGLES_3_0.app | debug | arm64-v8a Compiler exited with error code 1: C:\Android\SDK\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\bin\cl原创 2021-12-15 10:17:27 · 1764 阅读 · 0 评论 -
【我的OpenGL学习进阶之旅】C++如何加载TGA文件?
一、TGA文件相关介绍通过前面的博客【我的OpenGL学习进阶之旅】什么是TGA文件以及如何打开TGA文件?地址:https://ouyangpeng.blog.csdn.net/article/details/121408436【我的C语言学习进阶之旅】关于C/C++内存对齐读取文件产生的问题以及解决方法地址:https://ouyangpeng.blog.csdn.net/article/details/121539330我们了解了什么是TGA文件,现在我们来正式介绍一下C++中如何加载原创 2021-12-10 20:35:03 · 1520 阅读 · 0 评论 -
【我的OpenGL学习进阶之旅】如何抽取着色器代码到assets目录下的GLSL文件,以及如何通过Java或者C++代码来加载着GLSL文件?
如何抽取着色器代码到GLSL文件,并使用Java或者C++代码加载Assets目录下的GLSL文件原创 2021-12-10 11:27:29 · 2238 阅读 · 4 评论 -
【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册
一、要介绍本篇博客的原因前段时间学习OpenGL ES相关技术,下载了一个Github项目学习,项目地址在:https://github.com/githubhaohao/NDK_OpenGLES_3_0项目的关键代码都是C++实现的,所以需要使用JNI技术。我打开定义native方法的java类,如下所示:全部都是红色警告,原因是,C++代码层没有对应的遵循特定JNI格式的JNI函数。其实这个项目没有使用静态注册方法,而是使用了动态注册方法。下面我们分别来讲一下两种方式的区别。二、静态注册原创 2021-12-09 09:48:29 · 1566 阅读 · 0 评论 -
【我的C语言学习进阶之旅】什么是.hpp文件?
一、 .hpp文件是啥?2.1 .hpp的疑问来源最近在学习OpenGL ES的时候,学习了一个glm库(https://github.com/g-truc/glm),发现里面的代码包含大量的.hpp文件当然也有一些是.h文件好吧,我承认我刚刚学习C++,对于声明是.hpp文件不懂。我的第一想法是: .hpp 文件 是不是 .h 文件 和 .cpp 文件的结合?打开一个.hpp文件内容查看一些,发现有点像我理解的。下面来正式介绍一下声明是.hpp文件?2.2 什么是hpp文件?原创 2021-12-08 07:45:00 · 9872 阅读 · 2 评论 -
【我的Android进阶之旅】Android Studio中NDK开发移动.cpp 文件目录,重新编译报错:clang++: error: no such file or directory
一、错误描述今天在另外一台电脑将两个.cpp和.h文件移动了目录并提交到git仓库,然后这台电脑同步下更新的git记录,如下所示:然后重新编译,出现了错误,FAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':app:externalNativeBuildDebug'.> Build command failed. Error while executing pro原创 2021-11-29 08:53:38 · 1047 阅读 · 0 评论 -
【我的Android进阶之旅】NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情
一、需求描述在我之前的博客 【我的Android进阶之旅】NDK开发之在C++代码中使用Android Log打印日志,打印内容带有文件文件名、方法名、行号 等信息,方便定位日志输出的地方中,我有介绍如何实现可以打印带有文件名、方法名、行号 等信息的Log日志。现在,我又有新需求:想打印出C++的函数耗时以及代码片段耗时详情,接下来看看怎么做吧。二、实现打印出C++的函数耗时以及代码片段耗时详情在原来的LogUtil.h中,添加如下代码#include <sys/time.h>#d原创 2021-11-26 11:24:16 · 764 阅读 · 0 评论 -
【我的C语言学习进阶之旅】关于C/C++内存对齐读取文件产生的问题以及解决方法
一、问题描述今天在使用OpenGL ES 加载一个 TGA 图片文件的时候,出现了加载失败的问题。关于什么是TGA文件以及如何打开TGA文件?可以参考我的博客:【我的OpenGL学习进阶之旅】什么是TGA文件以及如何打开TGA文件?如下图所示,没有texture加载进来,黑黢黢的页面。查看日志打印,发现加载tga图片失败,如下所示:2021-11-25 15:42:31.690 6385-6548/com.oyp.openglesdemo I/NDK_JNI_LOG_TAG: [GLUt原创 2021-11-25 16:22:46 · 973 阅读 · 0 评论 -
【我的Android进阶之旅】解决NDK开发,编译的时候报错:open: Invalid argument File xxx.so is not writable.
一、错误描述今天编译NDK项目的时候报错,如下所示:C:/Android/SDK/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/../../../../i686-linux-android/bin\ld: fatal error: D:\GitLab Source\OpenGLESDemo\app\build\intermediates\cmake\debug\obj\x86\lib原创 2021-11-25 11:52:32 · 1666 阅读 · 0 评论 -
【我的Android进阶之旅】NDK开发之CMake自定义搜索规则,减少每次都需要配置.cpp的工作量
一、需求描述之前一篇文章 【我的Android进阶之旅】Android Studio 添加新的.Cpp和.h文件之后,代码不高亮,代码不可跳转的问题,写代码也没有提示写了添加一个新的.cpp和.h文件,因为路径写错了,导致代码不高亮也不可以跳转的问题。后来修复这个问题,发现每次添加一个.cpp和.h文件,我都得配置一遍,很麻烦。而且配置的内容越来越多,看起来很冗余。存在的.cpp和.h 文件需要给.cpp和.h 文件添加的配置要配置这么多,如果后面一直增加,这个配置会越来越多。# Cr原创 2021-11-01 16:39:21 · 1935 阅读 · 0 评论 -
【我的C/C++语言学习进阶之旅】解决使用algorithm库里面的sort函数的时候,编译报错:未能使函数模板“unknown-type std::less<void>::operator ()
一、问题描述定义了一个struct结构体如下所示:struct Review { string title; int rating;};测试它#include <iostream>#include <string>#include <vector>#include <algorithm>struct Review { string title; int rating;};int main(){ test_vector3原创 2021-10-29 09:33:23 · 2466 阅读 · 0 评论 -
【我的Android进阶之旅】NDK开发之在C++代码中使用Android Log打印日志,打印内容带有文件文件名、方法名、行号 等信息,方便定位日志输出的地方
一、需求描述1.1 原生接口的现状一般,我们在JNI层输出Android Log时,直接使用原生的接口,打印如下:// 实现 C语言中打印log到android控制台// 导入 头文件 android/log.h#include <android/log.h>// 定义一些宏#define DEBUG 1 //日志开关,1为开,其它为关#if(DEBUG==1)// 定义LOG 标签#define LOG_TAG "JNI_LOG_TAG"// 定义几个打印日志的方法/原创 2021-10-27 23:35:31 · 938 阅读 · 0 评论 -
【我的Android进阶之旅】Android Studio 添加新的.Cpp和.h文件之后,代码不高亮,代码不可跳转的问题,写代码也没有提示
一、问题描述刚刚,在学习OpenGL ES知识时,使用NDK来实现OpenGL ES 的demo。 在复制了一份之前的.cpp和.h文件并重命名之后。然后在CMakeLists.txt文件中将新的.cpp 和 .h 文件添加上,然后去修改这个新的.cpp 和 .h 文件,发现C++代码不高亮并且代码不可跳转了。二、解决问题2.1 初步排查添加的内容之前还好好的,复制、重命名、修改发现出问题了,那就只能去排查下刚刚添加修改的内容了。我们排查 cpp目录下,新复制的.cpp和.h 文件,以及CMa原创 2021-10-22 17:45:51 · 2255 阅读 · 0 评论 -
【我的C语言学习进阶之旅】Visual Studio 2019的代码智能提示快捷键是啥?
一、问题描述在Visual Studio 2019 敲代码的时候,会自动弹出代码提示。如下所示:但是如果你此时按了Esc键退出弹出的提示框,接着你继续敲代码的话,提示框就不会再弹出来了。有点蛋疼!!有没有办法,可以让提示框继续弹出来呢?二、Visual Studio 2019的代码智能提示快捷键上面的问题,有两种方式可以解决方法1:使用组合键“Ctrl+J”。即按住Ctrl键,然后再按J键。方法2:使用组合键“Alt+→”。即按住左边的Alt键(右边的Alt键也可以),然后再按方原创 2021-10-19 15:19:59 · 5881 阅读 · 5 评论 -
【我的C语言学习进阶之旅】解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.
一、问题描述今天在Visual Studio 2019中写一段C语言的代码,发生生成错误。弹框如下:点击【否(N)】,提示如下:错误具体信息为:错误 C4996 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.原创 2021-09-22 20:05:53 · 4074 阅读 · 1 评论 -
【我的C语言学习进阶之旅】Visual Studio 2019 注释与取消注释快捷键以及格式化代码
一、需求描述今天打开Vistual Stduio 2019 .写了一段C代码,想注释掉某一行代码的时候,发现不知道如何注释掉它。因为 习惯性的按照 Android Studio的快捷键 “Ctrl + /”,没有反应在Android Studio中。选中一行或几行代码,按“Ctrl + /”可以通过给每行前面添加“//”的方式注释代码。再次按“Ctrl + /”可以取消注释。没有反应,这是两个不同的IDE,那么就得去了解Vistual Stduio 2019 注释与取消注释的快捷键了!二、原创 2021-09-20 12:12:14 · 4357 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一转载 2013-07-27 21:15:28 · 2166 阅读 · 0 评论