首页 > 编程语言 >C++自学笔记1(c++原理)

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

时间:2024-07-21 09:55:38浏览次数:15  
标签:函数 代码 C++ 编译器 c++ 自学 main Log

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

相关文章

  • C++自学笔记2(变量与函数)
    变量(数据)编程的本质实际上就是操纵数据,任何种类的数据。我们想对数据进行修改、读取、写入,我们将数据放在一个叫做变量的东西,他可以允许我们对数据命名。我们需要利用数据、存放数据。当我们创造一个变量时,他被存放在两个地方“堆”和“栈”(再挖个坑)在物理意义上我们的数据......
  • C++自学笔记3(头文件)
    头文件就是各个函数申明存放地(也可以放结构体)现在你有main.c文件、A.c、B.c文件A.c包含A()函数B.c包含B()函数如果想要在main.c中使用A()B()两个函数,那么我们必须在intmain()之上进行申明_________________________________________________________________________//mai......
  • Standard Template Libary or C++ Standard Library
    C++提供一套标准的library称为C++standardlibrary完全以template完成,所以又被称为StandardTemplateLibrary。这套library专门有于实现常用的据结构(例如arry、list......)以及常用的算法(例如push,pop,insert,delete,query,retrieval......)。一般来说,STL包含六个主要的组件......
  • C++面向对象三大特性:继承
     前言:众所周知,C++作为一个面向对象的编程语言,有着三大特性:封装,继承,和多态。在前面的C++学习中,我们大部分所接触的只有封装,现在,就让我们来认识一下继承吧。一、继承的概念继承是指一个类(子类)从另一个类(父类)获得属性和行为的过程,它是使得代码得到复用的重要手段,允许程序员......
  • C++分组背包问题_动态规划dp_背包_算法竞赛
    OIWiki上的详细讲解模型总结分组背包的问题模板:有nnn件物品和一个大小为mm......
  • 一元二次方程c++题目
    描述利用公式x1=(-b+sqrt(b*b-4*a*c))/(2*a),x2=(-b-sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+bx+c=0的根,其中a不等于0。输入输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax?+bx+c=0的系数。输出输出一行,表示方程的解。若b2=4*a*c,则两个实根相......
  • Linux C++ 065-设计模式之组合模式
    LinuxC++065-设计模式之组合模式本节关键字:Linux、C++、设计模式、组合模式相关库函数:概念组合模式(CompositePattern),又叫做部分-整体模式,使得用户对单个对象和组合对象的使用具有一致性。它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理......
  • Linux C++ 066-设计模式之访问者模式
    LinuxC++066-设计模式之访问者模式本节关键字:Linux、C++、设计模式、访问者模式相关库函数:概念在访问者模式(VisitorPattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模......
  • C++面向对象编程的一个核心概念--RAII
    RAII是"ResourceAcquisitionIsInitialization"(资源获取即初始化)的缩写,它是C++编程中的一种编程技术,用于管理资源的生命周期。RAII是C++面向对象编程的一个核心概念,它利用对象的构造函数和析构函数来自动管理资源,如内存、文件句柄、线程、互斥锁等。RAII的主要原则包括:1.*......
  • 如何使用C++中的字符串类(如std::string)
    在C++中,std::string 类是标准模板库(StandardTemplateLibrary,STL)的一部分,它提供了对字符串的灵活处理。std::string 使得字符串的存储、操作、比较、查找等任务变得更加方便和高效。下面将介绍如何使用 std::string 类。1.包含头文件要使用 std::string,首先需要包含......