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文件让我们使用。
标签:函数,代码,C++,编译器,c++,自学,main,Log From: https://blog.csdn.net/weixin_64418869/article/details/140568363