Cpp-1

C++ 简介

在这里插入图片描述

bool类型

/*
    bool类型:
        1.用来描述"真"或"假"
        2.取值:true(真)    false(假)
        3.它占1字节( sizeof(bool) -> 1 )
*/

内联函数

/*
    <内联函数>
        1.它是函数,这一点是肯定的。
        2.通过“内存膨胀”的方式,以空间换取时间,目的是为了提高程序运行的速度
        3.实现方式:给“函数”和“函数声明”加上关键字“inline”
        4.使用限制:若函数体中的代码太多、或者涉及循环,不建议使用“内联函数”
*/

#include <stdio.h>

inline void func(int num);    // 关键字 inline

int main()
{
    func(6);
    return 0;
}

inline void func(int num)    // 关键字 inline
{
    printf("%d\n", num);
}

函数重载

/*
    <函数重载>
        1.在同一个项目中,定义的函数名字可以重复
        2.函数名必须一致
        3.函数的参数列表不同
        4.返回值无要求
*/

#include <stdio.h>

int func(int num)
{
    return num + 100;
}

float func(float num)
{
    return num;
}

int main()
{
    printf("%d\n", func(66));
    printf("%f\n", func(3.14f));    // 注意“函数重载”的“二义性”问题
    return 0;
}

函数参数缺省

/*
    <参数缺省>
        声明函数某个参数的时候,指定一个默认值,调用该函数时
        如果采用默认值,无需指定该参数

        注意事项:“有函数声明”和“无函数声明”省略参数写法有点不同
*/
// 无函数声明

#include <stdio.h>

int func(int num, float value = 10.0f)    // 对于参数,无默认值的在左,有默认值的在后
{
    return 666;
}

int main()
{
    printf("%d\n", func(5));
    return 0;
}

引用

/*
    <引用>
        1.对一个变量或者对象取的别名
        2.定义引用的时候必须要初始化
*/

#include <stdio.h>


int main()
{
    int playerGameAbility = 9;
    int& pga = playerGameAbility;    // 定义引用,必须要初始化

    // 引用只是个别名,所以说,它和被引用的东西对应的是同一段内存,引用是没有自己的内存的
    printf("%d\n", playerGameAbility);
    pga = 666;
    printf("%d\n", playerGameAbility);

    return 0;
}

命名空间

/*
    <命名空间>
        1.命名空间是用来组织和重用代码的编译单元
        2.通过命名空间,来避免冲突,解决重名现象
        3.命名空间关键字 namespace
        4.作用域运算符 ::
        5.命名空间可以嵌套
*/

#include <stdio.h>

namespace NAME_1
{
    int num = 2;
    void func()
    {
        printf("NAME_1 -> func\n");
    }

    namespace NAME_1_1
    {
        int num = 4;
        void func()
        {
            printf("NAME_1_1 -> func\n");
        }
    }
}

int main()
{
    int num = 6;
    printf("%d \n", NAME_1::num);
    printf("%d \n", NAME_1::NAME_1_1::num);
    printf("%d \n", num);

    return 0;
}


// 下面的空间,还是续接上面的空间
// 这种情况也叫“命名污染”,可以合理利用这个污染,在不同地方,完善同一个命名空间
namespace NAME_1
{
    char a;
    int num;
}

// 命名空间的取别名
namespace A = NAME_1;

cin || cout

cin 和 cout(类似 printf、scanf)

#include <iostream>

int main()
{
    int num;
    std::cin >> num;    // std 空间下的 cin(输入)、cout(输出)、endl(换行)
    std::cout << num << std::endl;

    return 0;
}
#include <iostream>
using namespace std;    // 声明使用 std 空间,以后再使用 cin、cout、endl就不用再强调 std::xxx

int main()
{
    int num;
    cin >> num;
    cout << num << endl;

    return 0;
}
#include <iostream>
using namespace std;

int main()
{
    int a, b, c, d, e, f, g;
    cin >> a >> b >> c >> d >> e >> f >> g;    // 不断输入数据,然后自动将数据分配给 a、b、c...
    cout << a << b << c << d << e << f << g << endl;    // 输出 a、b、c...

    cout << "Hello World!" << endl;

    return 0;
}
#include <iostream>
using std::cin;        // (使用)引入 std 下的 cin
using std::cout;    // (使用)引入 std 下的 cin
using std::endl;    // (使用)引入 std 下的 cin

int main()
{
    cout << "Hello World!" << endl;

    return 0;
}

new || delete

new 和 delete(类似 malloc、free)

#include <iostream>
using namespace std;


int main()
{
    // 1.申请单个内存(用来存放一个整型数据)
    int* p1 = new int;
    *p1 = 15;

    // 2.申请单个内存且初始化
    int* p2 = new int(666);    // 括号里面的666,是你想要在这个内存里面存的整型数据
    cout << *p2 << endl;

    // 3.批量申请(连续的内存)注意!批量申请无法初始化
    int* p3 = new int[10];
    for (int i = 0; i < 10; i++)
    {
        p3[i] = i;    // 赋值
        cout << "p3[" << i << "] = " << p3[i] << endl;    // 输出值
    }
    
    // 释放内存
    delete p1;        // 单个内存的释放
    delete p2;        // 单个内存的释放
    delete[] p3;    // 批量内存的释放


    return 0;
}
lcov --capture --initial --directory . --output-file base.info -i --ignore-errors unused lcov --capture --directory 'build/test-obj' --output-file test.info --exclude '/opt/*' --exclude '/usr/*' --ignore-errors unused lcov --add-tracefile 'base.info' --add-tracefile 'test.info' --output-file coverage.info --ignore-errors unused genhtml coverage.info --output-directory report_cov_new --exclude '/opt/*' --exclude '/usr/*' --include NMCProcessResource.cpp --include MaintenanceNMCPMModule.cpp --include ENEWEPDSource.cpp --include NMCProcessChamber.cpp --include OperationalProcess.cpp --include ENewNMCProcessResource.cpp --include TempCtlSource.cpp --include ENewAEICRFSource.cpp --include DF2MRFSource.cpp --include PhyTempCtl.cpp --include ENewCOMETDualRFSource.cpp --include RFSource.cpp --include EPDSource.cpp --include Generator.cpp --include AEICRFSource.cpp --include ENEWESCSource.cpp --include OperationalNMCPMModule.cpp --include COMETDualRFSource.cpp --include COMETDualMatch.cpp --include ENewCOMETGCDualRFSource.cpp --include AEICGenerator.cpp --include FunRecipeExecuter.cpp --include AEGCRFSource.cpp --include Chiller.cpp --include ProcessDataItem.cpp --include Match.cpp --include ProcessCheckItem.cpp --include ENewAEGCRFSource.cpp --include COMETGCDualRFSource.cpp --include CheckItem.cpp --include AEBVCRFSource.cpp --include PhyEPD.cpp --include ENewProcessChamber.cpp --include TCPCheTianEPD.cpp --include COMETDualMatchDriver.cpp --include MESCPowerCheckItem.cpp --include DF2MGCRFSource.cpp --include ESCSource.cpp --include OperationalLoadPort.cpp --include AEICGeneratorFastDriver.cpp --include AEDualMatchFastEDriver.cpp --include AESingleMatch.cpp --include AEICGCRFSource.cpp --include MaintenanceStripRPMModule.cpp --include NMCStripProChamber.cpp --include LDDCPDualMatchDriver.cpp --include PressureController.cpp --include FocusRing.cpp --include SMICEPDSource.cpp --include VATPendulumValve.cpp --include TCPEPD.cpp --include COMETDualMatchFastDriver.cpp --include ProcessMonitor.cpp --include ProcessCheckItem.h --include GroupedCheckItem.cpp --include TTLRFSource.cpp --include MaintenanceStripPMModule.cpp --include NMCStripProRChamber.cpp --include PhysicalController.cpp --include VatBufferflyDriver.cpp --include MKSPulseGeneratorDNetDriver.cpp --include MKSDualMatch.cpp --include LDDCPDualMatchFastDriver.cpp --include IODevice.cpp --include PhysicalCool.cpp --include AppRcpBody.cpp --include FunctionalIsolationManager.cpp --include BrooksPhysicalRobot.cpp --include BrooksPhysicalAcutranRobot.cpp --include PCGasValve.cpp --include GasValve.cpp --include GasRecipe.cpp --include WPHNMCProcessResource.cpp --include SouProcessCheckItem.cpp --include WPHCOMETDualRFSource.cpp --include MaintenanceGVOPMModule.cpp --include ESCDC.cpp --include E84HandoffMonitor.cpp --include ZYDEVNET.cpp --include VatBufferflyDriver.h --include TCPModALE.cpp --include TCPDevice.cpp --include TCPCheTianEPD.h --include PCI_Alpad.cpp --include MKSSingleMatch.cpp --include LDSCPSingleMatchFastDriver.cpp --include LDSCPDualMatchFastDriver.cpp --include COMETMatchDriver.cpp --include COMETDualMatchFastDriver.cpp.bak --include CIFXDEVNET.cpp --include AEICGeneratorFastEDriver.cpp --include FunctionalCool.cpp \ --ignore-errors unused !enhtml: ERRoR: cannot read file ./coverge.sh:line 9:--ignore-errors: command not found :command not foundl0: 报错
08-22
在使用 `lcov` 和 `genhtml` 生成代码覆盖率报告,如果遇到 `command not found` 和 `cannot read file` 错误,通常是因为环境配置不完整或命令执行路径错误。 ### `lcov: command not found` 错误 该错误表明系统中未安装 `lcov` 或其路径未包含在环境变量中。`lcov` 是一个基于 `gcov` 的工具集,用于生成 HTML 格式的覆盖率报告。为了解决该问题,需要确保 `lcov` 已正确安装,并且其可执行文件路径已添加到系统环境变量中。 在基于 Debian 的 Linux 系统上,可以通过以下命令安装 `lcov`: ```bash sudo apt-get install lcov ``` 安装完成后,检查 `lcov` 是否可执行: ```bash lcov --version ``` 如果系统仍然提示 `command not found`,则可能需要手动将 `lcov` 的安装路径(如 `/usr/local/bin/`)添加到 `PATH` 环境变量中,或者使用绝对路径执行命令。 ### `genhtml: command not found` 错误 `genhtml` 是 `lcov` 工具集的一部分,通常与 `lcov` 一同安装。如果出现该错误,可能是 `lcov` 安装不完整,或者 `genhtml` 未被正确链接。可以尝试重新安装 `lcov` 并确认其包含 `genhtml`: ```bash which genhtml ``` 如果命令未返回路径,则可能需要从源码编译安装 `lcov`,确保 `genhtml` 被正确生成并放置在系统路径中。 ### `cannot read file` 错误 该错误通常发生在 `lcov` 或 `geninfo` 无法找到 `.gcno` 或 `.gcda` 文件。这些文件由 `gcc` 在编译生成,用于记录代码覆盖率信息。若文件缺失或路径不正确,会导致 `lcov` 无法读取数据。 确保在编译项目启用了覆盖率选项: ```bash gcc -fprofile-arcs -ftest-coverage your_program.c -o your_program ``` 运行程序后,会生成 `.gcda` 文件。随后使用 `lcov` 收集覆盖率数据: ```bash lcov --capture --directory . --output-file coverage.info ``` 如果 `lcov` 报告无法读取某些文件,可以尝试清理旧的 `.gcno` 和 `.gcda` 文件,确保所有覆盖率数据与当前源码一致: ```bash find . -name "*.gcno" -o -name "*.gcda" | xargs rm -f make clean make lcov --capture --directory . --output-file coverage.info genhtml coverage.info --output-directory coverage_report ``` ### 示例:完整流程生成覆盖率报告 以下是一个完整的示例,展示如何清理旧数据、编译项目、收集覆盖率信息并生成 HTML 报告: ```bash # 清理旧的覆盖率数据 find . -name "*.gcno" -o -name "*.gcda" | xargs rm -f # 清理并重新编译项目 make clean make # 收集覆盖率信息 lcov --capture --directory . --output-file coverage.info # 生成 HTML 报告 genhtml coverage.info --output-directory coverage_report ``` 执行完成后,打开 `coverage_report/index.html` 即可查看代码覆盖率报告。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值