c++学习(1)(编译过程)

#include <iostream>

预处理

<>环境自带的文件

I o 是输入输出

源文件 有

.cpp编译文件(原码)

.sln解决方案文件

还有配置文件和项目文件

目标文件有

.obj文件把好多cpp文件合成一个汇编执行文件

.exe文件

程序生成的过程

预处理-》编译-》汇编-》链接-》执行

预处理:先是include把文件复制过来,但是还有别的说法后面会学

编译:每一个cpp是单独编译,转换成汇编语言

.cpp ->.s

汇编:把汇编语言转换成机器码 .s->.obj

链接:将多个obj设置成文件入口

执行:加载一些动态库,并执行文件

c++的注释

单行注释://

多行注释: /* */

建议在每个文件头部注释文件用途

cout输出的使用

优点:

1 支持多种输入格式多个数据合并输出

2 换行并刷新缓冲区

3 简化命名空间

什么是简化命名空间,这有个例子

cpp 复制代码
#include <iostream>

//命名空间输入简化

using namespace std;



int main()

{

    cout << "LYS IS NB !\n";

    std::cout << "Hello World!\n";

}

这里的std有点像C语言里面的stdio.h

这就是一个标准库,而cout是这个标准库里面的一个函数

std::cout << "Hello World!\n";

这句话是说用了std里面的cout函数输出了Hello World!

但是用了 using namespace std;

意味着可以把std省略掉了

但是是不是觉得这样有点多次一举呢?

其实并不是,因为在c++的开发过程中不像C语言基本只能调用基本库,c++会调用很多第三方库,这里面难免会出现重名的函数,但是在没有出现重名问题前就可以用这个方法省略,其实感觉这个本质就是在加了一个前置延长名字了

什么是可以数出多个内容呢

cout << "马年大吉" << 2026;

就是像这样一次输入多个内容

什么是换行并刷新缓冲呢

//std::endl换行并刷新缓冲

cout << "happy new year" << endl;

对于缓冲区的理解要到后面

关于预处理补充

除了#include,预处理还包括:

  • 宏定义 #define 替换

  • 条件编译 #ifdef、#ifndef 等

  • 删除注释

关于命名空间(std)的深入理解

你的理解很准确!std 是标准命名空间,类比C语言的stdio.h很贴切。让我补充一个例子说明为什么需要命名空间:

cpp 复制代码
#include <iostream>
using namespace std;

// 假设这是第三方库A
namespace LibA {
    void print() { cout << "LibA输出" << endl; }
}

// 假设这是第三方库B  
namespace LibB {
    void print() { cout << "LibB输出" << endl; }
}

int main() {
    print(); // 错误!编译器不知道用哪个print
    
    // 必须指定命名空间
    LibA::print(); // 调用LibA的print
    LibB::print(); // 调用LibB的print
    
    // std::cout 同理,防止和其他库的cout冲突
    return 0;
}

关于缓冲区(endl vs \n)

复制代码
cout << "立即输出" << endl;  // 立即显示并换行
cout << "暂存缓冲区" << "\n"; // 只换行,可能暂存缓冲区
  • endl = "\n" + 刷新缓冲区(flush)

  • 刷新缓冲区确保立即显示,但在频繁输出时影响性能

  • 程序正常结束时自动刷新缓冲区

多内容输出原理

复制代码
cout << "年龄:" << 18 << " 身高:" << 175.5;
// 本质是链式调用:(cout << "年龄:") << 18  ...

建议 :初期用using namespace std;方便学习,熟悉后建议用std::cout明确来源,养成良好代码习惯。

相关推荐
沫璃染墨8 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu20 分钟前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
kaiyou20261 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
无忧.芙桃1 小时前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
ShineWinsu1 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
朝朝辞暮i1 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法
inferno2 小时前
SVN学习笔记(二)
笔记·学习·svn
殷色玫瑰2 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
李游Leo2 小时前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos