cherno c++个人学习笔记(更新中)(b站叫最好的c++教程)

cherno c++个人学习笔记(更新中)(b站叫最好的c++教程),第1张

1. 预处理就是将里面的内容拷贝到目前文件中。

2.预处理里面的#define A b 就是把A改成b显示在编译后。

3.函数可以在一个cpp文件定义,在另一个文件申明后即可使用。当要使用头文件 .h里的函数时,则要求预处理加上所指向的头文件。

4.运行包含编译和链接,当单文件可以编译的时候不一定代表就可以运行。

5.当我们运行报错时error后会跟随两种错误,一种是 C开头的编译时语法报错,另一种是link链接时报错。

6.运行后的exe文件必须有个入口,基本上为main

7.

如果log函数定义在另一个文件中,但将另一个名字改错为logr时,函数multiply也会报错。这时把函数里的 log("multiply"); 引掉,没有问题,但是如果将 std::cout << multiply(5,8) <

int multiply(int a, int b)
{
	log("multiply");
	return a*b;
}

int main(void)
{
	std::cout << multiply(5,8) <

8.

函数在调用时必须找到一模一样的格式,不可以更改,链接会出错,必须要完全识别才可以。

完全相同的函数可以在一个或者多个文件重复申明,但不可以重复定义。

9.

要记住在头文件写类似 #include “s.h" 时,如果多个.cpp 都写了则会出现已经定义的问题。

1)一种方法时在 .h 文件定义时在最前面加上 static 表示其他文件对着这个函数include时只对该文件内部有效。每个文件会有自己版本的该函数,对其他文件编译好的obj文件不可见。

2)第二种是还是将.h文件定义时最前面加上 inline变成内联函数,把函数的身体拿来取代调用。就是把 .cpp文件调用函数时直接把 例如 log(1111) 形式变成 1111(假如log函数为

void log(const char* message)
{
	std::cout <

这样的话)

3)第三种就是作者常用的把.h文件中只留下函数的申明,而把定义部分放到两个.cpp文件中的一个文件。

10.

在C++中不同类型变量之间唯一的区别就是大小,这个变量占据了多少内存。

int 为4字节,可存储大概-21亿 - 21亿 ,

char  为 1字节;short 为2字节;long一般为4字节。long long 一般为8字节,

float 一般为4字节,double 为8字节。bool类型为1字节。

定义float 要在数据后加上 f(or F),不然就算 定义 也会变成double (隐式转换)。

11.数据类型会支持你输出的数据为什么类型,例如定义 char a = 65,cout <

12.如果我们在头文件#include内容时就是把该文件内容完整复制到该位置。

13.寻址是只能寻址到1 byte 而不能寻址到1bit.

14.

有返回值的函数可以直接定义个变量存储返回值。

15.

函数封装重复的事件(代码)可以简化代码。 但是太过分了不行,函数调用栈,参数存放在栈上,函数主要目的是为了防止代码重复。

16.

只有main函数可以不用指定返回值,默认返回0.

17.

vs文件夹随便在哪建文件都可以,例如可以在程序文件夹建立头文件,但一般还是对应点比较好。

18.

把 .h文件都放函数声明,然后在一个.cpp存放函数定义,在其他包含 .main() 的.cpp 直接使用,当然都要有.h的头文件。

19.

#pragma once是最常用也是最新的,也是基本上所有的编辑器都支持它。

#开头的为预处理命令(指令)。#pragma once意思是只#include这个文件一次,他是头文件保护符,防止我们在一个.cpp多次include一个.h,但不是防止在多个.cpp    include。 为什么会出现一个.cpp多次#include呢,因为会出现一个.h 叫player,可能include log,然后player 又被include到其他文件。比如两个.h,其中一个include另一个.h,但是.cpp同时include两个.h。

20.

除了#pragma once ,还可以使用下面的方式,但是此方法不常用。它的原理是首先会检查_log_h这个符号是否存在,不存在的话就将两行中间的代码都Include到编译里,如果被定义了则两行中间的都会被禁用。也就是第一次运行时已经定义了 _LOG_H,则后面不会再重复了。

#ifndef _LOG_H
#define _LOG_H


......




#endif

#ifndef x                 //先测试x是否被宏定义过
#define x
   程序段1   //如果x没有被宏定义过,定义x,并编译程序段 1
#endif   
  程序段2   //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1

#define  宏定义

在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。“define”为宏定义命令。

被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。

21.

#include中的 " " (引号)表示文件存在于该文件的相对位置,但对于<>(方括号)来说,永远没有说这个文件的相对位置,他们必须存在于所有include目录的某一个里面。

现在<>(方括号)只用于编译器的include路径,而" "则用于所有,即使把方括号改为引号也可以正常运行。

22.

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/789533.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)