ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C 和 C++ 区别

C 和 C++ 区别 一、理论语言定位C面向过程语言关注怎么做侧重流程、函数、内存操作没有类、对象、继承等面向对象特性。C在C基础上扩展支持面向过程 面向对象 泛型编程兼容大部分C语法。核心差异C是过程驱动C支持面向对象封装、继承、多态。核心特性差异输入输出C用printf/scanfC推荐cout/cin也兼容C IO。结构体C的struct只有成员变量C的struct可以写成员函数等同于class默认public。函数C不支持函数重载、默认参数C支持重载、默认参数、引用。内存管理C用malloc/freeC新增new/delete会自动调用构造/析构函数。命名空间C没有namespaceC有namespace解决命名冲突。异常C没有标准异常机制C支持try-catch-throw。编译层面C.c文件编译器gcc编译为C风格目标代码。C.cpp文件编译器gC名字会名字修饰(name mangling)支持重载C函数不会修饰所以C调用C库需要extern C。二、代码示例示例1结构体对比// C代码 structstruct ImageInfo{int width;int height;};// C不能在struct内部写函数// C structstruct ImageInfo{int width;int height;// C结构体可以包含成员函数void setSize(int w, int h){width w;height h;}};示例2内存分配对比// Cstruct ImageInfo* img (struct ImageInfo*)malloc(sizeof(struct ImageInfo));free(img);// CImageInfo* img new ImageInfo();delete img;示例3extern C 影像开发高频#ifdef __cplusplusextern C {#endif// 这段函数编译成C风格符号C代码可以直接给C层调用void setSensorExposure(int exp);#ifdef __cplusplus}#endif三、手机影像算法集成 实际工作场景你做Camera HAL / 影像算法集成时这个知识点非常常用Camera HAL 框架底层大量代码是 C语言Android原生BSP、驱动接口都是C追求精简、可控内存没有RTTI、异常这些额外开销。上层算法模块、算法封装、算法管理类一般用 C用类封装 Sensor、ISP、CaptureSession把曝光、白平衡、降噪算法封装成对象代码更容易维护。使用命名空间隔离不同厂商算法模块避免函数名冲突。函数重载比如重载setParam支持传入int、结构体等不同参数。跨层交互痛点HAL的C接口 和 C算法模块互相调用必须用extern C否则C名字修饰会导致找不到符号so库加载失败影像进程crash。选型取舍底层硬件交互、性能极致要求优先C二进制体积小无额外开销。算法业务逻辑、多模块管理C面向对象便于维护复杂影像管线。面试高频坑C兼容C但不是完全兼容C没有引用、类malloc不会调用构造函数new会。✅ 面试口述精简版C是面向过程语言适合底层驱动、HAL这类轻量代码C基于C扩展支持面向对象、泛型编程增加类、引用、重载、new/delete、namespace。C没有名字修饰C存在名字修饰C调用C库要用extern C。在手机影像开发中Camera HAL底层多为C上层算法模块常用C两者经常混编重点要处理好跨语言符号兼容问题。
返回列表