c++ 第二天

写c++的基本流程:

是你有一些c++的源文件,然后将这些源文件给到编译器,编译器将其转变成二进制的东西,二进制可能是某种库,或者是可执行的程序。

可执行程序

#include <iostream>

在#符号之后的都是预处理语句,编译器收到源文件后,一看到这条语句,就先处理这个预处理语句。

在编译之前就被处理了

include——指在这个例子中,需要找到iostream的文件,然后该文件所有内容拷贝到现在的文件内,这些文件通常被称为“头文件”

<iostream>——头文件是因为我们需要一个被调用的函数的声明

std::cout << "Hello World" << std::endl;

std::cout——可以让我们在终端打印东西

<< ——只是写成这样,并没有更多的实际含义,可以理解成为一个函数,相当于↓

std::cout.print("Hello World").print(std::endl);

另一层的含义是,将字符串Hello World推送到cout流中,然后打印到终端,然后推送一个行结束符;

endl——告诉终端跳到下一行

std::cin.get();

cin.get——等待按下enter键,在前往下一句代码之前等待,这时候程序暂停执行,直到我们按下回车键后,程序继续运行下一行,

但已经没有下一行了,所以程序返回0,意味着代码执行完了。

int main()

main——任何一个c++程序都有main函数,是程序的入口

main函数比较特殊,它不一定要返回值,如果不返回值.,默认返回了0

如何转换成可运行的二进制文件?

  1. #include <iostream> 先处理预处理语句 ,就可以使用cout.、cin.get函数了

  1. 编译:将所有的c++代码转换为实际的机器代码

重要的设置决定我们怎么转换代码:

解决方案配置

X86的意思是目标平台是windows 32位,也就是说会生成32位的windows应用程序

右击点击项目属性(最下面)

这里

是比较重要的,如果我们想做一个生成库文件的项目

  1. 项目中的每一个cpp文件都会被编译,但头文件不会被编译,

每一个cpp文件都被编译成了一个object file(目标文件)(如果用vs,生成的文件后缀是.obj)

把这些obj文件合并成一个执行文件

单独编译快捷键:ctrl+f7

编译成功

  1. 链接(LINK):基本上,链接就是将所有的obj文件,粘合到一起,把这些obj文件合并成一个执行文件exe

多个c++文件呢?

用自己的logging函数来包裹coun函数,因此我们建立一个函数,参数是message,打印这个message.到终端

const char*——是一个包含字符串的类型

点击

看是否可以运行

新建Log.cpp

声明——这个符号、函数是存在的;

定义——这个函数到底是什么

新建EndBrace.h头文件

编译成功

因为编译器做的是打开这个文件复制的所有内容

确保正在编辑的是当前的配置,以及要应用这些配置的平台 yes后就不能产生obj文件了

.i文件

修改

obj文件内容(二进制)

.asm 汇编语言

没有main函数会出现链接错误

C开头代表编译错误(缺少分号)

一种类型的链接错误:

未解决的外部符号 unresolvef external symbol :当链接器找不到它需要的东西时发生。

(比如函数Log错写成Logr)

static int Muitiply(int a, int b)

static——意味着这个Muitiply函数只被声明在这个翻译单元中,也就是这里的Math.cpp文件中,

若Muitiply在这个Math.cp从不被调用,如果build,不会得到任何错误;

声明和定义必须完全一致

返回值是void,就不能返回int

另一种链接错误:

有重复的符号,换句话说,有函数或变量有相同的名字和相同的签名,两个名字相同的返回值和相同的参数。

解决方法一:

static void Log(const char* message)

将Log函数标记为静态的,这意味着在链接Log函数时,Log函数只能是内部函数,每个cpp文件都会有自己的版本的Log函数

解决方法二:

inline void Log(const char* message)

inline——获取我们实际的函数体并将函数调用替换为函数体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值