Cpp_SDay02

空山新雨后,天气晚来春


前言

看视频令人犯困,


一、No File!!!

文件只是提供给编译器源代码的一种方式,你负责告诉编译器你输入的是什么类型的一种文件,以及编译器如何处理它。
若创建一个.cpp文件,编译器会把它当做c++文件。
类似的,若创建一个.c或.H文件,编译器会分别当做c语言文件和头文件
这些都是默认的规定,亦可修改,这就是编译器处理它的方式。
可以制作.cherno(.tony)文件,只要告诉编译器,这个文件是一个c++文件,请像c++文件一样编译它。故文件没有意义!

二、preProcessing

编译的第一阶段,预处理。
编译器会遍历所有的预处理语句并进行处理
常用的预处理语句是include、if、ifdef,还有pragma

#include指定了你想要包含的文件,预处理器打开那个文件,阅读他的所有内容,然后把它粘贴到你写的文件中。

如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
真滴秀。

查看预处理后的cpp文件(.i文件)。
右键项目,
在这里插入图片描述
点击properties
在这里插入图片描述
再将此处的no改成yes,即可以在output路径下的debug里面找到.i文件,用txt打开就能看到预处理后的文件了

示例:
在这里插入图片描述

通常的.obj文件打开来看是一堆二进制代码,
可通过选择properties/(C/C++)/Output Files/Assembler Output/Assembly-Only Listing (/FA)
重新ctrl+F7再看output路径下debug里面会出现.asm文件(里面是汇编语言),相比于.obj的二进制代码,可读性大大提升。

error C2134:(C是compile,编译阶段)

程序入口不必是main(),可以自己修改Entry Point
在这里插入图片描述

三、static的用意:

用于方法的返回值类型之前:意味着此函数只被声明在这个translation unit(翻译单元)中
一般情况下如果cpp不嵌套cpp文件的话,一个tu(translation unit)就是一个cpp

问题情形:
三个文件:一个Log.h、一个Log.cpp、一个Math.cpp
两个cpp文件中都有

#include "Log.h"

根据#include的preprocessing原理易得此处必出错(one or more multiply defined symbols found)
解决方案:1.static 2.inline 3.
1).static:在Log.h文件中函数返回值前加上static,意味着在链接此函数的时候,其只能是内部函数,即两个cpp文件中的此函数只能是内部函数,他们都会有自己版本的此函数,对任何其他的obj文件都不可见。
2).inline:同样的位置换成inline,获取实际的函数体并将函数调用替换为函数体
3).头文件放函数申明,函数体放入translation unit中

四、signed number /unsigned number

signed number(有符号数)四个字节:32位,一位表示符号,剩余31位,故表示范围:±2^31
而如果都是同一符号的话岂不是会平白浪费同样的空间大小,故引入unsigned number(无符号数)表示范围:2^32

无论是用float还是double来定义变量,悬停鼠标看到的类型都是double
在这里插入图片描述
在这里插入图片描述
在5.5后面加上一个f或F,此变量才会成为float型
用sizeof可知一个数据占几个字节(不同的编译器的设定可能不一样)

五、函数

函数的主要目的是为了防止代码重复
函数分为声明和定义(声明通常存储在头文件中,在translation unit或cpp文件中编写定义)

六、#pragma once

#pragma once本质上是一个被发送到编译器或预处理器的预处理指令
pragma once:只包括这个文件一次。pragma once监督这个头文件,阻止我们单个头文件多次被包含,并转换为单个translation unit(这并不妨碍我们将头文件放到程序的多个位置)

在这里插入图片描述
只会执行一次


尖括号只用于编译器包含路径,引号可以做一切。
iostream是一个没有扩展名的文件,以此将C++标准库和C标准库做区分
C标准库通常有.h扩展,但C++没有
meilai?

总结

关键是,要明白,为何而努力
关键是,要时时能想起努力的原因,而心神震荡,气血上涌

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值