首页 > 编程语言 >C++ 项目结构

C++ 项目结构

时间:2024-01-23 22:33:21浏览次数:44  
标签:函数 项目 C++ 编译器 参数 字符串 main 结构

1. C++ 项目结构

C++ 项目包含几千个文件,当构建项目时,需要选择编译哪些文件,选择哪种工具编译这些文件组织称可执行文件

1.1 编译

计算机处理器只能执行底层二进制指令,编译器需要将C++源码转换成处理器能执行的指令集。

  • 编译器配置的内存称为栈帧(Stack frame),配置内存传递数据
    • 函数接收参数并返回一个值
    • 函数声明只在函数内部使用的变量,并且将只有在函数被调用时才存在
  • 代码错误,向用户提示错误信息

1.2 链接代码

编译器将一个或多个C++源码文件编译成对象文件。然后通过连接器将对象文件链接到一个可执行程序中

1. 3 源代码

.cpp 结尾的文本文件称为源代码文件

#include <iostream>

// 程序入口
int main() {
    // << 运算符号将 字符串 "Helle World!\n" 添加到流对象 std::cout 中
    // cout对象是在std名称空间下声明的
    // cout对象是iostream类的一个实例,并在main函数调用前已经创建
    // << 表示名为 << 的函数被调用,该函数会将字符串中的每个字符打印到控制台上,直到遇到第一个NULL字符
    std::cout << "Hello World!\n";
}
  • 注释:以 //开头的行,编译器会自动忽略到行尾的所有文本,多行注释以 /* */包裹
  • 大括号: {} 代码快
  • 函数:声明了返回值类型,具有一对圆括号的函数名,圆括号中声明了传递给函数的参数
  • 约定main函数是程序的入口,是项目代码中首先被调用的函数。若main函数没有返回值,默认返回 0
  • 语句以分号结尾
  • 字符串使用双引号括起来
  • std是命名空间,表示类似目录代码的集合
  • 双冒号::是域解析运算符
  • 运算符重载:对运算符默认行为进行重新定义
  • # 向编译器声明某种类型信息
    • #include 将文件中的内容拷贝到该源代码文件中,这种特定文件称为头文件,适用于通过库复用代码
    • #define
    • #pragma
  • 是标准库的一部分,在C++编译器附带的include目录下找到,使用 <>表明编译器应该用存储在头文件的标准目录中找相关内容,使用双引号 "" 自定义头文件的绝对或者相对路径,头文件的命名以.h结尾

1.4 解析命令行参数

通过命令行向可执行文件传递参数

#include <iostream>

// 命令行参数以空格隔开,参数第一个为命令程序本身,所有接收到的参数都是字符串类型,若是想要获取一个字符串参数,则需要对字符串进行类型转换
int main(int argc, char *argv[]) {
    // 终端输出传入命令行的参数个数
    std::cout << "number of arguments is: " << argc << std::endl;

    // 通过for循环打印出每个参数的值
    for (int i = 0; i < argc; i++) {
        std::cout << argv[i] << std::endl;
    }
}
# 编译
c++ src/main.cpp -o main

# 运行
./main 1 2 3 4 5

# 输出:
number of arguments is: 6
./main
1
2
3
4
5
  • 接收命令行传递过来的参数,main函数包含两个参数
    • 第一个参数 argc,是整数,指定传递过来的参数数量
    • 第二个参数 argv,是一个指向内存中C字符串的指针数组
  • []表示一个数组,并且数组中每个元素的类型是 char **表示数组的每个元素都是指向内存的指针,char * 表示指向内存中以NUL字符结尾0个或多个字符,字符串的长度由到NUL字符串的字符总数得出
  • std::endl : 代替换行符添加新的一行,然后对输入流的内容刷新
  • 数组索引从0开始,通过 [i]方式访问,数组的长度为元素数量n,数组最后一个元素的索引为 n-1

标签:函数,项目,C++,编译器,参数,字符串,main,结构
From: https://www.cnblogs.com/2bjiujiu/p/17983591

相关文章

  • MeterSphere操作之创建项目
    创建项目在MeterSphere中,测试用例、测试计划、接口测试、UI测试及性能测试等的管理均通过项目进行分权分域查看和管理,使用MeterSphere进行测试,登录进入工作空间后,首先需要创建项目,在项目下创建管理操作功能用例、测试计划、接口测试、UI测试、性能测试等。进一步的管理模型......
  • 项目总结
    时间片轮询:结构体封装每个任务的时间片(也就是执行间隔),计数器,函数指针。采用定时器计时。比如说任务1每2s执行一次,任务2每5s执行一次,定时器每1s产生中断,定时时间一到每个任务的计数器就加1,当计数器和时间片相等时执行该任务。任务冲突:将每个任务对应的结构体装入结构体数组,采用遍......
  • 数据结构
    哈希表也称为散列表,用于实现键值对的存储和查找。hash值的计算通常通过与运算hash&(m-1)方式实现,其桶的数量必须为2的次幂数(也可以通过取模hash%m计算hash值)。哈希函数将键映射到索引的位置,时间复杂度为O(1)(最坏O(n)),常见的有开放地址法和链表法两种:开放地址法:当发生哈希冲突时,......
  • 结构体对齐:
    结构体对齐:公式1:前面的地址必须是后面的地址正数倍,不是就补齐公式2:整个Struct的地址必须是最大字节的整数倍练习:StructE1{inta;charb;charc}e1;第一地址肯定存放a是4Byte地址,第二地址,b要1Byte的地址,来欢迎公式一登场:4==1*N(N等于正整数)答"是"!地址现在为......
  • 【干货】VS Code中配置C/C++运行环境
    1、安装MinGW-w64有个很重要的工具:MinGW-w64,里面包含了在windows上编译调试C++代码所需要的所有环境(以及一些其他的小工具包,例如linux风格的命令ls,将这个包解压缩后的路径添加到系统环境变量PATH中就可以用了)。他的具体的发布和下载位置:Releases·skeeto/w64devkit(github.co......
  • TSINGSEE车辆检测算法及车辆结构化数据在车辆智能管控中的应用
    AI边缘计算智能分析网关V4车辆检测、车牌识别算法融合了ORC识别、云计算、计算机视觉、大数据检索等多种技术,可将运动中的机动车牌照从复杂的背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等流程,识别出车辆牌号、颜色等信息。AI智能分析网关V4内置近40......
  • vue2项目使用jsencrypt.js实现分段加密解密
    安装:npminstall jsencrypt安装:npminstall js-base64组件:demo.vue<template></template><script>import{SM4Encrypt,SM4Decrypt}from'@/assets/des.js'importtestImportJsonfrom'@/assets/data.json'exportdefault{......
  • android studio打开别人的项目,解决各种错误的方法
    1、as提示,gradle工具从官方地址下载不下来(非常常见):修改项目下Gradlescript的gradle-wrapper.properties因为天朝网络屏蔽,把官方地址修改为国内腾讯源即可让androidstudio正常自动下载https://mirrors.cloud.tencent.com/gradle/gradle-7.2-bin.zip,最后的gradle-7.2-bin.zip必......
  • C++U5-第04课-广度优先搜索1
    学习目标广度优先搜索简称广搜搜,英文缩写(BFS)顾名思义就是按照广度顺序优先进行枚举,其本质也是一种暴力枚举的思想。 广度优先搜索(Breadth-FirstSearch,简称BFS)是一种图搜索算法,用于遍历或搜索图数据结构的所有节点。该算法从起始节点开始,逐层地向外扩展,先访问当前节点的所有......
  • C++U5-第03课-深度优先搜索3-连通块类型
    学习目标 本节课主要学习一种类型的深度优先搜索-连通块  [数水坑]  【思路分析】相连的水坑可以被认为是一个水坑,求水坑的个数,就是求连通块的个数。可以采用搜索来访问每个点。每访问到一个W表示至少有一个水坑,通过搜索8个方向,得到这个点连通的所有的......