
AI工程化
文章平均质量分 72
aiweker
AI 10年从业者,记录我的AI成长历程!InfoQ写作社区和阿里云开发者社区签约作者,长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发
展开
-
c语言基础系列15-调试技巧:GDB
当我们的程序出现问题且不知道具体的原因时,我们就需要对程序进行调试分析,这时GDB调试工具就会起到很大作用。GDB是GNU开源组织发布的一款强大的Unix下的程序调试工具,在Linux系统中应用非常广泛。它可以用于调试C,C++,Objective-C等语言编写的程序。原创 2025-03-11 03:30:00 · 1726 阅读 · 0 评论 -
c语言基础系列14-动态库和静态库
我们在编写接口或者使用第三方应用时,都会打包或者引入.so或者.a文件。这个so就是动态库,.a文件就是静态库。具体的,动态库和静态库是在C语言中用来组织和共享代码的两种方式。静态库(Static Library)是一组预编译的对象文件的集合,它们被组合成一个单一的文件。当使用静态库时,链接器会将库中的代码和数据复制一份到最终的可执行文件中。这意味着可执行文件会包含所有需要的函数和数据,使得程序可以独立运行。静态库的文件扩展名通常为 .a(Unix-like系统)或 .lib(Windows系统)。原创 2025-03-10 13:48:29 · 748 阅读 · 0 评论 -
c语言基础系列13-C/C++编译工具:cmake
在一个复杂的项目中,通常会以模块化的方式来组织项目的框架,统一一个如main.cpp做为入口程序(如ffmpeg)。下面是一个使用 CMake 构建的示例,其中包括了 target_link_libraries,link_directories,include_directories,add_executable 和 add_library 等关键部分,以生成一个可执行文件和一个动态库。它用于在系统中查找指定的软件包,并将其路径或库的相关信息导入到CMake中,以便在项目中使用。原创 2025-03-10 13:48:09 · 922 阅读 · 0 评论 -
c语言基础系列12-C/C++编译工具:makefile
Makefile是一种用于管理和组织源代码的工具,通常用于构建和编译软件项目。它由一系列规则组成,每个规则指定如何生成一个或多个目标文件。Makefile也包括变量和注释,使得用户能够灵活地配置和定制构建过程。Makefile通常用于C、C++和其他编程语言的项目中,它可以自动化编译、链接和打包过程,减少了手动执行命令的工作量。通过Makefile,开发人员可以轻松地管理项目中的各种依赖关系和构建规则,确保代码的可维护性和可靠性。原创 2025-03-09 07:00:00 · 929 阅读 · 0 评论 -
c语言基础系列11-多线程编程
下面是一个简单的线程池实现例子,它使用了pthread库的各种函数,包括pthread_cond_wait,pthread_cond_broadcast和pthread_mutex_lock等。然后,它创建了五个工作线程,每个线程都等待条件变量被激活。主线程循环10次,每次发出一个信号,唤醒一个等待的线程。最后,主线程发出一个广播信号,唤醒所有等待的线程,然后等待所有线程完成。pthread库是一个开源的多线程库,它提供了丰富的多线程功能,包括创建、销毁线程、线程同步、线程通信等。原创 2025-03-08 06:00:00 · 159 阅读 · 0 评论 -
c语言基础系列10-回调函数
回调函数是指在某个特定事件发生时,由某个已注册的函数进行调用。通常情况下,回调函数作为参数传递给另一个函数,当特定事件发生时,这个函数会调用传入的回调函数。在C语言中,回调函数通常实现为函数指针的形式,它允许函数能够通过函数指针的方式调用其他函数。在C语言中,可以通过指针来实现一个回调函数,函数的参数是一个函数。首先定义一个函数指针作为回调函数的参数类型,然后在调用函数时将需要回调的函数作为参数传入。函数接受一个整型参数和一个函数指针作为参数,然后在函数内部执行需要回调的操作,并调用传入的回调函数。原创 2025-03-08 04:00:00 · 275 阅读 · 0 评论 -
c语言基础系列9-日志
它接受两个参数,第一个是一个va_list类型的变量,第二个是可变参数列表中的最后一个固定参数。使用这些宏和函数,可以在函数内部遍历可变参数列表,获取每个参数的值,并进行相应的处理。这在需要处理不定数量参数的函数中非常有用,比如printf函数就是一个典型的例子。它是一个指向参数列表的指针,可以用于遍历参数列表中的每个参数。的函数,函数接受日志级别和消息作为参数,并在函数内部根据日志级别输出相应的日志信息。另外,在C语言中,va_list、va_start和va_end是用于处理可变参数列表的宏和函数。原创 2025-03-07 01:00:00 · 526 阅读 · 0 评论 -
c语言基础系列8-条件编译
这些例子展示了如何使用条件编译来根据不同的编译环境灵活地控制程序,使得代码可以适应不同的平台、调试需求或特性支持。然后,根据不同版本的OpenCV选择不同的函数来创建图像。这个例子展示了如何使用条件编译来选择不同版本的库,以确保代码在不同的环境中都能正常工作。当涉及到不同版本的库或接口时,条件编译可以用来选择不同版本的代码。条件编译允许程序员在编译时根据不同的条件编译不同的代码,例如根据不同的操作系统或编译器进行条件编译。条件编译在C语言中是一个非常有用的功能,可以根据不同的编译环境灵活地控制程序的行为。原创 2025-03-06 02:00:00 · 906 阅读 · 0 评论 -
c语言基础系列7-宏
在C语言中,宏是一种预处理器指令,用于在程序中定义具有特定含义的符号常量、函数或代码片段。当程序被编译时,预处理器会将宏的定义替换为其对应的值或代码,从而可以简化代码和提高代码的可维护性。当你在C语言中使用宏时,你还可以使用宏来定义一些常用的代码片段。宏定义了一个交换两个变量值的代码片段,并且在程序中使用了这个宏来交换变量。宏来计算圆的面积,预处理器会将。代表了计算圆的面积的宏。,最终程序会输出圆的面积。替换为实际的计算公式。原创 2025-03-05 05:00:00 · 217 阅读 · 0 评论 -
c语言基础系列6-c++类
C语言是面向过程的语言,而C++是面向对象的编程语言,其中面向对象的结构就是类。这个在很多编程语言都存在如python,java等。在面向对象的编程语言中,类是一种用来描述对象的模板或蓝图。它定义了对象的属性和行为,并可以用来创建对象实例。类的作用包括:封装:类将数据和操作封装在一起,使得对象可以隐藏内部状态和实现细节,从而提高代码的可维护性和安全性。继承:类可以通过继承机制派生出子类,子类可以继承父类的属性和方法,并可以重写或扩展父类的行为。原创 2025-03-04 05:00:00 · 730 阅读 · 0 评论 -
c语言基础系列5-头文件
举一个例子来说明头文件在大型项目中的应用。我们可以使用头文件来定义每个模块的接口,并在需要的地方包含这些头文件来使用模块提供的功能。避免在头文件中包含过多的实现细节:头文件应该主要包含接口的声明,而不是实现的细节。避免在头文件中定义全局变量:头文件中定义的全局变量可能会导致重复定义的问题,因此应该避免在头文件中定义全局变量,而是将全局变量定义在源文件中,然后使用 extern 关键字声明即可。命名规范:为了便于代码维护和组织,应该遵循良好的命名规范来命名头文件,并且使用有意义的文件名来表示头文件的用途。原创 2025-03-03 02:00:00 · 434 阅读 · 0 评论 -
c语言基础系列4-C/C++内存操作
它的原型为:void *calloc(size_t num, size_t size),其中num是要分配的元素数量,size是每个元素的大小,返回指向分配内存的指针。它的原型为:void *malloc(size_t size),其中size是要分配的内存空间的字节数,返回指向分配内存的指针。在C++中,还可以使用malloc和free函数进行内存分配和释放,但需要注意,malloc和free是C语言中的函数,不会调用构造函数和析构函数,而new和delete会调用对象的构造函数和析构函数。原创 2025-03-03 01:30:00 · 968 阅读 · 0 评论 -
c语言基础系列3-C语言自定义类型
C语言中的结构体是一种用户自定义的数据类型,允许将不同类型的数据组合在一起。它由多个成员变量组成,每个成员变量可以是不同的数据类型,包括基本数据类型、数组、指针等。结构体的作用是可以用来组织和管理相关的数据,并且可以进行整体操作。它可以用于表示复杂的数据结构,如学生信息、员工信息等。定义结构体:使用关键字struct定义结构体,指定成员变量的类型和名称。访问结构体成员:通过成员运算符来访问结构体的成员变量。结构体作为参数:可以将结构体作为函数参数传递,并在函数内部对其进行操作。原创 2025-03-02 05:00:00 · 309 阅读 · 0 评论 -
c语言基础系列2-如何编译你的C/C++代码
位置无关的代码是一种特殊的机器代码,可以在内存中的任何位置执行而无需进行修改。使用 -fPIC 选项编译代码时,编译器会生成与位置相关的代码不同的代码,通常会牺牲一些性能来获取这种位置无关的特性。这个选项会让编译器使用最高级别的优化,以提高程序的性能。优化主要通过 (1)函数内联:将函数调用替换为函数体的实际代码,避免了函数调用的开销。(2)循环优化:对循环进行优化,减少循环内部的计算次数,或者利用CPU的流水线进行更有效的指令执行。如果有依赖关系,可以将依赖的源文件放在前面,确保先编译依赖的源文件。原创 2025-03-02 00:00:00 · 837 阅读 · 0 评论 -
c语言基础系列1-指针
为什么要在这里回顾下C/C++的基础知识,无疑是因为它的高效性。C语言是一种高效、快速、通用的编程语言,起源于1972年,由贝尔实验室的Dennis Ritchie和Ken Thompson共同开发。最初,C语言的设计是为了开发Unix操作系统,它在计算机领域的发展中起到了至关重要的作用。C语言的应用场景非常广泛,在操作系统开发(Linux、Unix),嵌入式开发,数据库开发(MySQL、SQLite),编译器和网络驱动程序,游戏开发(Unity游戏引擎等)以及应用程序开发等各方面都发挥的重要中。原创 2025-03-01 06:00:00 · 721 阅读 · 0 评论