栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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.

内存就是一切,debug设置断点的时候一定要放在实际执行的代码上(前面的灰色区域)。要确保是在debug的模式下,而不是release(这将会导致程序被重新安排)。当断点运行时,在断点处会显示黄色箭头表示运行到此处,指示当前指令所在的位置,此时按下continue按钮将会和平常一样继续执行程序。

1.F11时,没有开始执行代码,只设置函数堆栈框架,此时鼠标放在message 上会显示该变量被设置为 “hello world”。

 2.再按下F12时,从main.cpp跳转到log.app,此时黄色箭头在代码前,意味着还没有执行该行代码。

此时再按下F10时,打印出"hello world".

 

 再按下F10则会回到main.cpp,箭头还在原位置,再按下则会到达下一个位置.

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847086.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号