C++自学笔记1(c++原理)

Why学习C++?

因为C++直接控制硬件。C++的工作原理是:C++代码,代码交给编译器来编译,编译器将代码转换成目标平台的机器码。(机器码:你操作的设备上CPU实际执行的二进制命令)所以我们使用C++可以控制CPU上每条进程的指令。

C++可以运用在哪些平台上?

几乎任何平台,只要你找到对应的编译器。例如:x64编译器编写的x64机器码就可以在64位CPU上执行。所以在Windows、Mac、Linux等几乎所有桌面操作系统;iOS、Android等移动操作系统;游戏主机xbox、Switch、WiiU等。

C++相比C#和JAva

C#和JAva在虚拟机上运行,意味着你编写的代码首先被翻译成一种中间语言,想要在目标平台运行你的程序时,虚拟机再将其转换为机器码。

C++是一种本地语言,好比用中文写一本《我好牛逼》给中国人读,C#和JAva好比中文写《我好牛逼》但是给英国人看,那么你必须要带一个翻译过程将其翻译成《I'm so NB》在给英国人读。虽然例子不太恰当但是中间的环节就是代码语言的差别。

C#和JAva更倾向于运行时对系统进行优化,不需要榨干CPU每一寸性能。所以当我们想要榨干CPU的性能时就需要用到C++。

C++时如何工作的?

首先自己编写的C++代码叫做“C++源文件”,源文件交给编译器进行编译,编译出01二进制的一些东西(机器码),这一串二进制机械码可能是某些库或者是执行程序。

#include <iostream>

int main()
{
	std::cout<<"Hello word"<<std::endl;
	std::cin.get();
}
 

#include <iostream>,#include叫做预处理,在代码编译之前优先处理<>内的文件,也就是将<iostream>文件中所有代码复制粘贴过来,让我们可以使用其包含的函数cout、cin等等。而<>内代指的 文件我们称为“头文件”。

源文件

main函数是程序执行的入口,从入口进入逐行扫描每一行代码(还有插入、循环、选择等,先挖个坑)。

扫描到main函数中第一行cout是输出函数,就是将“Hello word”推送到cout流当中并从终端打印出来,其中的“<<”并不是左移符号而是重载函数,一个函数。我们可以将其替换成“.print”将会有同样的效果。结尾处endl表示换行。

扫描到main函数中第二行cin是输入函数,其中的get()函数,等待回车,当我们输入回车后程序结束。

如果main中有第三行代码,其因为get函数的存在必须等用户输入回车后,才可以执行第三行代码,这就是get函数的等待效果。

一般的函数,最后一行通常写返回值“return 0”或者“return a”,但是main特殊可以不写返回值,或者说如果你不写它默认有一行“return 0”。

以上我们就得到了main.cpp源文件,接下来轮到编译器登场。

编译器

在vs中我们需要根据你要做的目标平台去更改设置,如x64就是64位CPU,x86就是32位CPU

在下拉菜单中properties中你可以根据你项目的平台规则,项目需求去改变编译器的设置从而生成对应平台的二进制机器码。

对于学习而言vs默认的配置已经足够我们学习,其中Debug模式相比于releas模式要慢的多,是因为releas模式关掉了许多优化,但也为我们调试代码提供便利。

所以经过编译我们得到了main.obj以及头文件的obj格式文件,现在我们要做的就是将其粘结在一起形成可执行文件(.exe格式文件)就需要Linker链接器

链接器

为了更加明显突出链接器的存在,我们将输出流用Log函数代替,并将其放在Log.cpp文件中

#include <iostream>

void Log(const char* message); 

int main()
{
	Log("Hello word");
	std::cin.get();
	
 } 
#include <iostream>

void Log(const char* message)
{
	std::cout<<message<<std::endl;
}

第一个函数我们就是上文的main.cpp中代码,将cout输出流用Log代替。为了多次复用,我们常常将其放在单独的文件夹中,我们用Log.cpp文件存放Log函数的代码。

那么,从main的视角中怎么才能知道Log函数是什么呢?

Log.cpp文件中对Log函数进行定义,也就是Log函数需要做什么、怎么处理数据。

main.cpp文件中void Log(const char* message);表示对Log函数申明,申明就是告诉main函数,存在Log函数,可以继续编译。申明就起到链接作用。

我们现在有了main.cpp与Log.cpp编译运行后我们得到了main.obj与Log.obj,链接器就会将其整合成一个exe文件让我们使用。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值